์ƒˆ์†Œ์‹

๐Ÿ“ŒDevOps/๐Ÿ“กOS

[Linux] crontab, ์‰˜ ์Šคํฌ๋ฆฝํŠธ ์กฐํ•ฉ์œผ๋กœ ๋ฆฌ๋ˆ…์Šค ๋กœ๊ทธ ๊ด€๋ฆฌํ•˜๊ธฐ (feat.crontab)

  • -

 

 

๊ฐœ์š”(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 {} \;

 

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.