πŸ“ŒDevOps/πŸ“‘OS

[Linux] crontab, μ‰˜ 슀크립트 μ‘°ν•©μœΌλ‘œ λ¦¬λˆ…μŠ€ 둜그 κ΄€λ¦¬ν•˜κΈ° (feat.crontab)

ooweat 2023. 3. 6. 14:29

 

 

κ°œμš”(feat. Linux) 

* μ™œ 이 μž‘μ—…μ„ ν•˜λŠ”κ±°μ§€?

πŸ“ OSλ₯Ό μ‚¬μš©ν•˜λŠ” μˆœκ°„λΆ€ν„° μš°λ¦¬λŠ” ν•„μˆ˜μ μœΌλ‘œ Storage capacity 관리λ₯Ό ν•˜κ²Œ λœλ‹€.

OSκ°€ μ„€μΉ˜λ˜λ©° 기본적으둜 κ°€μ Έκ°€λŠ” μš©λŸ‰μ„ λΊ€ λ‚˜λ¨Έμ§€μ˜

ν•œμ •λœ μš©λŸ‰μ†μ—μ„œ μš°λ¦¬λŠ” OSλ₯Ό μ‚¬μš©ν•˜κ²Œ λ˜λŠ”λ°,

관리λ₯Ό ν•˜μ§€ μ•ŠμœΌλ©΄ μœˆλ„μš°μ—μ„œ μš°λ¦¬κ°€ 늘 'C:\ λ“œλΌμ΄λΈŒ' 에 μš©λŸ‰μ΄ λΆ€μ‘± λ˜λŠ” Mac OSμ—μ„œ APFS의 Volume 이 κ°€λ“μ°¨μ„œ 일뢀 μ„œλΉ„μŠ€κ°€ λ™μž‘ν•˜μ§€ μ•Šκ±°λ‚˜, μ›ν•˜λŠ” 자료λ₯Ό λ‹€μš΄λ‘œλ“œ λ°›μ§€ λͺ»ν•˜κ²Œ λœλ‹€.

 

이 사둀가 일반 λ°μŠ€ν¬νƒ‘ λ˜λŠ” λž©νƒ‘μ΄ μ•„λ‹Œ μ‹€λ¬΄μ—μ„œ μ‚¬μš©ν•˜λŠ” μ„œλ²„μ— 적용될 경우 더 이상 둜그λ₯Ό μŒ“μ„ 수 μ—†μ–΄ μ„œλΉ„μŠ€κ°€ μ„œλ²„λ¦¬κ²Œ λ˜λŠ” κ²½μš°λ„ μ‹¬μ‹¬μΉ˜ μ•Šκ²Œ λ³Ό 수 μžˆλ‹€.

 

μ‚¬μš©ν•˜μ§€ μ•Šκ±°λ‚˜ 였래된 νŒŒμΌλ“€μ„ 보관 주기에 따라 λ³΄κ΄€ν•˜λ©° (보관 μ‹œ, μš©λŸ‰μ˜ μ°¨μ§€λ₯Ό 쀄이기 μœ„ν•΄ μ••μΆ•ν•˜μ—¬ 보관) μ •ν•΄μ§„ μΌμ •λŸ‰ 만큼의 데이터λ₯Ό μ§€μ†μ μœΌλ‘œ μœ μ§€ν•˜μ—¬ 관리 ν•˜λŠ”κ²Œ OSλ₯Ό μ œλŒ€λ‘œ μ‚¬μš©ν•  수 μžˆλŠ” 첫 번째 방법이닀.

 

μ—¬κΈ°μ„œ 보관주기(Crontab)와 μœ μ§€ 관리λ₯Ό μœ„ν•œ κ°„λ‹¨ν•œ κΈ°λ³Έ 슀크립트 ν”„λ‘œκ·Έλž˜λ°(Shell Script)λ₯Ό 톡해 κ°„λž΅ν•˜κ²Œ μ‚¬μš©ν•˜κ³ μž ν•œλ‹€.

보관주기와 ν”„λ‘œκ·Έλž˜λ°μ— 'Crontab' κ³Ό 'Shell Script' λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λͺ¨λ“  OSμ—μ„œ λ³„λ„μ˜ λͺ¨λ“ˆ μ„€μΉ˜ 없이 기본적으둜 OS 에 λ‚΄μž₯λ˜μ–΄ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

Crontab

Crontab μ΄λž€?

Crontab은 λ¦¬λˆ…μŠ€ μš΄μ˜μ²΄μ œμ—μ„œ 배치 μž‘μ—…μ„ μŠ€μΌ€μ₯΄λ§ ν•˜κΈ° μœ„ν•œ ν”„λ‘œκ·Έλž¨μœΌλ‘œ, νŠΉμ • μ‹œκ°„ λ˜λŠ” 정기적인 주기에 따라 μž‘μ—…μ΄ μ‹€ν–‰λ˜κ²Œλ” μŠ€μΌ€μ₯΄λ§μ„ ν•  수 μžˆλ‹€.

 

Crontab은 μ•„λž˜μ™€ 같이 μ£ΌκΈ°λ₯Ό μ„€μ •ν•  수 μžˆλ‹€.

   *          *          *         *          *
λΆ„(0-59)  μ‹œκ°„(0-23)  일(1-31)   μ›”(1-12)   μš”μΌ(0-7)

Crontab 적용

μš°λ¦¬λŠ” μ•„λž˜ 예제λ₯Ό μ΄μš©ν•˜μ—¬ 개발/운영 λ“± 싀무에 μ μš©ν•  μ˜ˆμ •μ΄λ‹€. μ‰˜ μŠ€ν¬λ¦½νŠΈκ°€ μ‹€ν–‰λ˜λ©° λ‚¨κΈ°λŠ” λ‘œκ·Έλ“€μ„ κΈ°λ‘ν•˜λŠ” 것과 κ·Έλ ‡μ§€ μ•Šμ€ 것 두 κ°€μ§€ μŠ€νƒ€μΌ 쀑 μ›ν•˜κ³ μž ν•˜λŠ” λ‚΄μš©μ„ μ„ νƒν•˜λ„λ‘ ν•œλ‹€.  (Tip. μ‹€λ¬΄μ—μ„œ logλ₯Ό λ°±μ—…ν•˜λŠ” κ³Όμ • 쀑 μ€‘μš”λ„μ— 따라 μ €μž₯ν•˜λŠ” λ‚΄μš©μ΄ λ‹€λ₯΄λ‹€.

WEB μ‹€ν–‰ λ‘œκ·Έλ‚˜, κ°„λ‹¨ν•œ μ„œλΉ„μŠ€ μ‹€ν–‰ λ‘œκ·Έμ™€ 같은 κ²½μš°μ—λŠ” κ³Όκ°ν•˜κ²Œ μ§€μš°λ©°, μ§€μš°λ©΄μ„œ λ‚¨κΈ°λŠ” λ‘œκ·ΈλŠ” μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€. )

#λ§€μ›” 1일 00μ‹œ 00뢄에 /app/cron/ κ²½λ‘œμ— μžˆλŠ” log_backup.sh ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•œλ‹€. 
#μ‹€ν–‰λ˜λ©° λ‚¨κΈ°λŠ” λ‘œκ·ΈλŠ” μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.
00 00 1 * * /app/cron/log_backup.sh < /dev/null 1>/dev/null 2>&1

#λ§€μ›” 1일 00μ‹œ 00뢄에 /app/cron/ κ²½λ‘œμ— μžˆλŠ” tomcat_log_backup.sh ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•œλ‹€. 
#μ‹€ν–‰λ˜λ©° λ‚¨κΈ°λŠ” 둜그 /app/logs/ κ²½λ‘œμ— μžˆλŠ” tomcat_cron.log νŒŒμΌμ— μ €μž₯ν•œλ‹€.
00 00 1 * * /app/cron/tomcat_log_backup.sh > /app/logs/tomcat_cron.log

Shell Script

Shell Script λž€?

μ‰˜ μŠ€ν¬λ¦½νŠΈλž€ κ°„λ‹¨νžˆ λ§ν•˜μžλ©΄ Unix/Linux μ»€λ§¨λ“œλ“±μ„ λ‚˜μ—΄ν•΄μ„œ ν”„λ‘œκ·Έλž˜λ°ν•˜μ—¬ μ‹€ν–‰ν•˜λŠ” 것이닀.

이 λ˜ν•œ μ•„μ£Ό κ°„λ‹¨ν•œ ν”„λ‘œκ·Έλž˜λ° 이기 λ•Œλ¬Έμ—, μ–Έμ œ, μ–΄λ””μ„œ, μ–΄λ–€ 쑰건으둜 μ–΄λ– ν•œ λͺ…령을 μ‹€ν–‰μ‹œν‚¬ 것인가 ? 등을 ν•  수 μžˆλ‹€.

 

Shell Script μ μš©

μš°λ¦¬λŠ” μ•„λž˜ 예제λ₯Ό μ΄μš©ν•˜μ—¬ μ μš©ν•΄λ³΄κ³ μž ν•œλ‹€.

*맀달 1일에 μ§€λ‚œ 달 데이터λ₯Ό λ°±μ—…ν•˜λ©°, 90μΌκ°„μ˜ 데이터λ₯Ό μœ μ§€ν•œλ‹€. 4κ°œμ›” 이상 μ§€λ‚œ Dir은 μ‚­μ œν•œλ‹€.
#! /bin/sh
. ~/.bash_profile

#System : Backup
#Purpose : Log Backup
#author : ooweat

#맀달 1일에 μ§€λ‚œ 달 데이터λ₯Ό λ°±μ—…
currdate=`date '+%Y%m%d'`
#μ§€λ‚œ 달
BACKUP_MONTH=`date +%Y%m -d '-1month'`
RM_MONTH=`date +%Y%m -d '-4month'`
FILE_STYLE=*`date +%Y-%m -d '-1month'`*

#Tomcat μ‚¬μš© μ‹œ,
TARGETPATH="/app/service/tomcat/logs"
#기타 Service μ‚¬μš© μ‹œ,
#TARGETPATH="/app/service/logs"

echo '#####################################################################################'
echo '##########################[ MONTHLY LOG BACKUP START ]###############################'
echo '#############################[ JOBDATE ]#############################################'
echo '############################[ '$currdate' ]#############################################'
echo '#####################################################################################'

cd $TARGETPATH
if [ ! -d $BACKUP_MONTH ]
then
        mkdir -p $BACKUP_MONTH
        chmod 775 $BACKUP_MONTH
fi
echo '#####################################################################################'
echo 'Log Files Moved On Monthly Dir'
echo '#####################################################################################'
#파일 이동
mv $TARGETPATH/$FILE_STYLE $TARGETPATH/$BACKUP_MONTH/

#λ°±μ—… λ””λ ‰ν† λ¦¬λ‘œ 이동
cd $TARGETPATH/$BACKUP_MONTH/

echo '#####################################################################################'
echo 'Files xz'
echo '#####################################################################################'
#μ••μΆ•
xz ./*

cd $TARGETPATH
cd $(pwd)
echo '#####################################################################################'
echo 'Delete Old Files'
echo '#####################################################################################'
#μƒμ„±μΌλ‘œλΆ€ν„°, 90일이 μ§€λ‚œ 파일 μ‚­μ œ
find $TARGETPATH/* -mtime +90 -exec rm {} \;
echo '#####################################################################################'
echo 'Delete Old Dir'
echo '#####################################################################################'
find $TARGETPATH/$RM_MONTH -exec rmdir {} \;

 

λ°˜μ‘ν˜•