hann-blume
Linux - Cron / CronTab 본문
Crontab 파일 정의 형식
Cron
Linux System에서 주기적인 작업처리를 진행할 때 주로사용 된다. ( 예약 작업을 의미 ) |
Cron은 프로세스 예약 데몬이며, 특정시각에 지정 된 작업을 수행한다. |
Crontab은 Cron에 의해 실행 될 예약 작업의 목록을 정의하는 파일을 말한다. ( CronTable ) |
Cron은 사용자별 예약작업을 따로 가질 수 있다 |
Cron작업에 대한 로그기록은 /var/log/cron에 저장 된다. |
Cron 데몬 활성 후 매분 실행해야할 작업이 있는지 지속적으로 확인. |
Cron 데몬은 예약작업이 정의 된 모든 사용자의 예약작업이 함께 실행된다. |
예약작업이 수행되지 않을 경우 다음 예약 작업시간까지 대기 후 실행. |
Cron 사용자 제어 파일은 2개의 파일 중 한 개만 사용. |
Cron 사용자 제어 파일이 존재하지 않을 경우 관리자만 작업이 가능. |
# rpm -qa | grep cronie ( cron 패키지 )
cronie-1.4.11-14.el7_2.1.x86_64
# ps -ef | grep cron ( cron 활성화 상태 확인 )
root 1081 1 0 14:01 ? 00:00:00 /usr/sbin/crond –n
# ps -ef | grep cron ( cron 활성화 상태 확인 )
root 1081 1 0 14:01 ? 00:00:00 /usr/sbin/crond –n
# ls -l /var/spool/cron ( 사용자 별 crontab 설정 정보 저장 디렉터리 )
-rw-------. 1 root root 333 3월 2 19:48 root ( crontab 설정을 적용해야 생성된다. )
# ls -d /etc/cron* ( cron 관련 파일 및 디렉터리 )
/etc/cron.d /etc/cron.deny /etc/cron.monthly /etc/crontab
/etc/cron.daily /etc/cron.hourly /etc/cron.weekly
Linux crontab 명령어 기본 사용 형식
crontab -l | 예약 작업 리스트 확인 |
crontab -e | 예약 작업 편집 |
crontab -r | 예약 작업 삭제 |
crontab -u [ UserName ] | 특정 사용자의 예약작업 확인 및 편집 |
※ crontab -e 명령을 이용하여 예약작업을 정의 한다.
※ crontab 내용 입력은 vi 편집기와 사용법이 동일하다.
※ 특정 사용자 이름지정은 “root” 관리자 계정만 사용이 가능하다.
Crontab 파일 정의 형식
# cat /etc/crontab
필드 | 의미 | 범위 |
첫 번째 필드 | 분 | “ 0 ~ 59 ” |
두 번째 필드 | 시 | “ 0 ~ 23 ” |
세 번째 필드 | 일 | “ 0 ~ 31 ” |
네 번째 필드 | 월 | “ 1 ~ 12 ” |
다섯 번째 필드 | 요일 | “ 0 ~ 6 [ 0(일), 6(토) ] ” |
여섯 번째 필드 | 실제 수행 할 명령어 | “ 명령어는 반드시 한줄로 입력 ” |
Crontab 파일 정의 형식 (다수의 값 지정)
옵션 | 의미 | 사용 예시 |
“ * “ | 모든 값을 의미 | “ * ” : 모든 일 마다 ( 3번 필드 ) |
“ - " | 범위 지정 | “ 1-12 ” : 1월 부터 12월 ( 4번 필드 ) |
“ , “ | 여러 개의 값 지정 | “ 10,15 ” : 10시 그리고 15시 ( 2번 필드 ) |
“ / “ | 특정 주기로 나눌 때 사용 | “ */10 ” : 매 10분 마다 ( 1번 필드 ) |
ex1)
# mkdir ./script
# cd ./script
# vi ./cron_test1.sh
echo "Cron Test" > /root/cron.txt
# chmod +x ./cron_test1.sh
예약작업 편집(-e 옵션)
# crontab -e ( 매일 정각 19시에 cron_test1.sh 스크립트 수행 )
0 19 * * * /root/script/cron_test1.sh
crontab: installing new crontab
예약작업 리스트 확인(-l 옵션)
# crontab -l
0 19 * * * /root/script/cron_test1.sh
Cron 실행 결과 확인
# cat /root/cron.txtCron 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)
ex2)
# 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 ( 매일 정각 20시에 cron_test2.sh 스크립트 수행 )
0 20 * * * /root/script/cron_test2.sh
crontab: installing new crontab
# crontab -l
0 19 * * * /root/script/cron_test1.sh
0 20 * * * /root/script/cron_test2.sh
Cron 실행 결과 확인
# 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)
[ 일반 사용자를 이용한 cron 설정 후 목록 확인 ]
$ 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: 허가 거부
[ 관리자 계정을 이용하여 일반 사용자의 crontab 확인 ]
# ls -l /var/spool/cron
합계 8
-rw-------. 1 itbank itbank 39 3월 2 19:50 hann
-rw-------. 1 root root 333 3월 2 19:48 root
[ /etc/cron.deny 파일을 이용 한 사용자 제어 ]
사용자를 deny파일에 추가
# vi /etc/cron.deny
hann
일반 사용자가 corn을 사용한 제어를 못하도록 명시
$ crontab -e
You (hann) are not allowed to use this program (crontab)
See crontab(1) for more information
확인
$ crontab -l
You (hann) are not allowed to use this program (crontab)
See crontab(1) for more information
※ 일반 사용자 계정의 Cron 설정이 불가능해지는 것을 확인 ( 작업 확인 후 다시 사용 할 수 있도록 목록에서 제거 )
[Crontab 삭제 및 백업]
먼저 crontab 백업
# crontab -l > /root/cron_back.txt
※ 선택 삭제가 없으므로, 삭제 젂 반드시 Backup을 진행하는 것이 좋다.
( crontab -r 명령어 입력 시 젂체 설정정보 삭제 )
백업한 것 확인
# cat /root/cron_back.txt
15 19 * * * root /root/script/cron_test1.sh
삭제
# crontab -r
확인
# crontab -l
no crontab for root
예약작업은 삭제했지만 내용을 백업해 두었으므로
필요하면 다시 가져와서 Cron에 등록하면 된다.
# crontab cron_back.txt
# crontab -l
15 19 * * * root /root/script/cron_test1.sh
여기까지 Cron / CronTab 에 대한 설명이 끝났다.
'Linux' 카테고리의 다른 글
Linux - DNS (Domain Name Server) (0) | 2020.03.22 |
---|---|
Linux - ShellScript (0) | 2020.03.22 |
Linux - Backup (0) | 2020.03.22 |
Linux - Samba (0) | 2020.03.21 |
Linux - NFS (Network File System) (0) | 2020.03.21 |