Linux - 주기적인 작업 등록 : cron, crontab
cron
cron을 이용하여 주기적으로 실행하는 작업은 시스템 운영에 필요한 작업과 사용자의 필요에 의한 작업으로 나눌 수 있다. 시스템 운영에 필요한 작업은 root 권한으로 /etc/crontab에 등록해서 주기적으로 수행할 수 있고, 사용자는 crontab이라는 명령을 수행해서 등록할 수 있다. crontab 파일은 다음과 같이 총 7개의 필드로 구성되어 있다.
crontab 필드
필드 | 설정 값 및 내용 |
minute | 분(minute)을 나타내고, 0~59로 설정한다. |
hour | 시(hour)를 나타내고, 0~23으로 설정한다. |
day of month | 날(day of month)을 나타내고, 1~31로 설정한다. |
month | 월(month)을 나타내고, 1~12로 설정한다. |
day of week | 요일을 나타내고, 0~7로 설정한다. 0과 7은 일요일에 해당하고, 1은 월요일, 2는 화요일, 3은 수요일, 4는 목요일, 5는 금요일, 6은 토요일이다. 또한, 직접 sun, mon, tue, wed, thu, fri, sat라고 입력해도 된다. |
user-name | 사용자 이름을 명기한다. 일반적으로 생략해서 사용한다. |
command | 실행할 명령어를 기입한다. |
작업 등록 명령어 : crontab
사용자가 주기적인 작업을 등록하기 위해 사용하는 명령으로 실행하면 기본 편집기인 vi가 실행된다. 설정된 작업은 '/var/spool/cron/사용자아이디' 파일로 저장된다. 만약 아이디가 j9m이면 /var/spool/cron/j9m이라는 파일이 생성되면서 관련 정보가 저장된다.
crontab 옵션
옵션 | 설명 |
-l | crontab에 설정된 내용을 출력한다. |
-e | crontab의 내용을 작성하거나 수정한다. |
-r | crontab의 내용이 저장된 파일을 삭제한다. |
-u | root 사용자가 특정 사용자의 crontab 파일을 다룰 때 사용한다. |
-i | -r 옵션으로 crontab 설정 파일을 삭제하기 전에 질의를 진행해서 y또는 Y를 입력하는 경우에만 실행되도록 지정한다. |
사용 예
crontab [option]
crontab [option] 파일명
① 설정된 crontab의 내용을 출력한다.
crontab -l
② crontab의 내용을 작성하거나 수정한다.
crontab -e
③ 저장된 crontab 설정 파일을 삭제한다.
crontab -r
④ j9m 사용자의 crontab 내용을 작성하거나 수정한다.
crontab -e -u j9m
⑤ 저장된 crontab 설정 파일을 삭제하기 전에 질의(y/Y)를 진행한다.
crontab -ir
⑥ schedule.txt 파일에 설정된 내용을 불러와서 등록한다.
crontab schedule.txt
[crontab 설정 예제]
⑦ 월요일부터 금요일까지 오후 12시에 /home/j9m/wokr.sh라는 스크립트를 실행한다.
0 12 * * 1-5 /home/j9m/work.sh
⑧ 1월부터 12월까지 2개월마다 1일날 오전 4시 10분에 /etc/check.sh라는 스크립트를 실행한다. 날짜 필드 부분의 다른 표기 방법인 '10 4 1 */2 *'또는 '10 4 1 1,3,5,7,9,11 *'으로 대체 표기 가능하다.
10 4 1 1-12/2 * /etc/check.sh
⑨ 월요일 오전 10시에 'Notice'라는 제목으로 /root/notice라는 파일의 내용을 지정한 메일 주소인 j9m@gmail.com로 발송한다. 날짜 필드 부분의 다른 표기 방법인 '0 10 * * mon'으로 대체 가능하다.
0 10 * * 1 cat /root/notice | mail -s "Notice" j9m@gmail.com
⑩ 월, 수, 금요일 오전 4시에 '.bak'로 끝나는 파일을 찾아 삭제한다.
0 4 * * 1,3,5 find / -name '*.bak' -exec rm -rf {} \;
⑪ /etc/heartbeat.sh를 10분 주기로 실행한다. '0-59/10 * * * * /etc/heartbeat.sh'와 동일하다.
*/10 * * * * /etc/heartbeat.sh
cron 사용자 제한
/etc/cron.allow 파일과 /etc/cron.deny 파일로 cron 사용자를 제한할 수 있다. /etc/cron.allow 파일이 존재하는 경우에는 /etc/cron.deny 파일 존재 유무에 상관없이 /etc/cron.allow 파일에 등록된 사용자만 가능하다. /etc/cron.allow 파일이 존재하지 않고, /etc/cron.deny 파일만 존재하는 경우에는 /etc/cron.deny 파일에 등록된 사용자만 사용이 불가능하다. /etc/cron.allow 및 /etc/cron.deny 파일이 모두 존재하지 않는 경우에는 CentOS 7 버전 기준으로 일반 사용자는 불가능하고 root만 사용 가능하다.
참고자료
CentOS 7으로 리눅스마스터 1급 정복하기