[Centos 7] Linux Crond & Crontab (시스템 예약 작업 크론 )

2022. 11. 24. 15:57리눅스(Linux)

Linux Cron
   - Linux System에서 주기적인 작업처리를 진행할 때 주로사용 된다. ( 예약 작업을 의미 )
   - Cron은 프로세스 예약 데몬이며, 특정시각에 지정 된 작업을 수행한다.
   - Crontab은 Cron에 의해 실행 될 예약 작업의 목록을 정의하는 파일을 말한다. ( CronTable )
   - Cron은 사용자별 예약작업을 따로 가질 수 있다
   - Cron작업에 대한 로그기록은 /var/log/cron에 저장 된다.

 

$ Linux cron 관련 확인사항

# rpm -qa | grep cronie 
cronie-1.4.11-14.el7_2.1.x86_64
   - cron 패키지

# ps -ef | grep cron 
root 1081 1 0 14:01 ? 00:00:00 /usr/sbin/crond –n
   - cron 활성화 상태 확인

# ls -l /var/log/cron 
-rw-------. 1 root root 3875 3월 2 16:20 /var/log/cron
   - cron 로그 기록

# ls -l /var/spool/cron 
-rw-------. 1 root root 333 3월 2 19:48 root 
   - 사용자 별 crontab 설정 정보 저장 디렉터리
   - crontab 설정을 적용해야 생성된다.

# ls -d /etc/cron* 
/etc/cron.d /etc/cron.deny /etc/cron.monthly /etc/crontab
/etc/cron.daily /etc/cron.hourly /etc/cron.weekly
   - cron 관련 파일 및 디렉터리

$ Linux crontab 명령어 기본 사용 형식
   - crontab -l : 예약 작업 리스트 확인
   - crontab -e : 예약 작업 편집
   - crontab -r : 예약 작업 삭제
   - crontab -u [ UserName ] : 특정 사용자의 예약작업 확인 및 편집

crontab -e 명령을 이용하여 예약작업을 정의 한다.
crontab 내용 입력은 vi 편집기와 사용법이 동일하다.
특정 사용자 이름지정은 “root” 관리자 계정만 사용이 가능하다.

 

$ Linux crontab 파일 정의 형식

# cat /etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12)
# | | | | .---- day of week (0 - 6) [ 0 (일요일), 6 (토요일) ]
# | | | | |
# * * * * * user-name command to be executed

Linux crontab 파일 정의 형식
Linux crontab 파일 정의 형식 ( 다수의 값 지정 )

$ Linux crontab 예제

# vi ./cron_test1.sh
#!/bin/bash
echo "Cron Test" > /root/cron.txt

# chmod +x ./cron_test1.sh

# crontab -e 
0 19 * * * /root/script/cron_test1.sh
crontab: installing new crontab
   - 매일 정각 19시에 cron_test1.sh 스크립트 수행

# crontab -l
0 19 * * * /root/script/cron_test1.sh

# ls -l /root
합계 12
-rw-r--r--. 1 root root 13 3월 2 19:03 cron.txt

# cat /root/cron.txt
Cron Test

# ls -l /var/spool/cron
합계 4
-rw-------. 1 root root 52 3월 2 19:02 root

# tail /var/log/cron
Mar 2 19:15:01 MyLinux CROND[44531]: (root) CMD (/root/script/cron_test1.sh)
# vi ./cron_test2.sh
#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/backup“
tar -cvzpf $BACKUP_DIR/test-$DATE.tar.gz /var/log 
   - /var/log 디렉터리 Backup “날짜정보 포함”
find $BACKUP_DIR/* -mtime +10 -exec rm {} \;
   - 10일이 지난 Backup File 삭제

# chmod +x ./cron_test2.sh

# crontab -e
0 20 * * * /root/script/cron_test2.sh
crontab: installing new crontab
   - 매일 정각 20시에 cron_test2.sh 스크립트 수행

# crontab -l
0 19 * * * /root/script/cron_test1.sh
0 20 * * * /root/script/cron_test2.sh

# ls /backup
test-03-09-2020.tar.gz

# tail /var/log/cron
Mar 9 20:26:02 localhost CROND[1765]: (root) CMD (/root/script/cron_test2.sh)

$ Linux crontab 설정 예시

* * * * * /root/script/1_min.sh
   - 매 1분마다 1_min.sh 스크립트 실행 ( 하루에 1440회 )

*/10 * * * * /root/script/10_min.sh
   - 10분마다 10_min.sh 스크립트 실행

0,30 * * * * /root/script/30_min.sh
   - 매시 정각, 30분에 30_min.sh 스크립트 실행

0 2 * * * /root/script/backup.sh
   - 매일 정각 02시에 backup.sh 스크립트 실행

0 */6 * * * /root/script/6_hours.sh
   - 6시간마다 6_hours.sh 스크립트 실행 (00:00, 06:00, 12:00, 18:00)

30 13 * * 1-5 /root/script/weekday.sh
   - 평일(월요일~금요일) 13:30분에 weekday.sh 스크립트 실행

30 15 * * 0,6 /root/script/weekend.sh
   - 주말(일요일, 토요일) 15:30분에 weekend.sh 스크립트 실행

40 17 * * 0,3,5 rdate -s time.bora.net 
   - 매주 월,수,금 17:40분에 rdate 명령어를 이용하여 시간 동기화
$ crontab -u root -l
must be privileged to use -u

$ crontab -e
crontab: installing new crontab

$ crontab -l
30 15 * * 0,6 /root/script/weekend.sh

$ ls -l /var/spool/cron
ls: cannot open directory /var/spool/cron: 허가 거부
   - 일반 사용자를 이용한 cron 설정 후 목록 확인
# ls -l /var/spool/cron
합계 8
-rw-------. 1 itbank itbank 39 3월 2 19:50 user
-rw-------. 1 root root 333 3월 2 19:48 root
   - 관리자 계정을 이용하여 user 사용자의 crontab 확인
# vi /etc/cron.deny
user

$ crontab -e
You (user) are not allowed to use this program (crontab)
See crontab(1) for more information

$ crontab -l
You (user) are not allowed to use this program (crontab)
See crontab(1) for more information
   - /etc/cron.deny 파일을 이용 한 사용자 제어
   - 일반 사용자 계정의 Cron 설정이 불가능해지는 것을 확인 
   ( 작업 확인 후 다시 사용 할 수 있도록 목록에서 제거 )
# crontab -l > /root/cron_back.txt 

# cat /root/cron_back.txt
15 19 * * * root /root/script/cron_test1.sh

# crontab -r

# crontab -l
no crontab for root

# crontab /root/cron_back.txt

# crontab -l
15 19 * * * root /root/script/cron_test1.sh
   - Linux crontab 삭제 및 백업
   - 선택 삭제가 없으므로, 삭제 전 반드시 Backup을 진행하는 것이 좋다. 
   ( crontab -r 명령어 입력 시 전체 설정정보 삭제 )