Linux

Linux - 주기적인 작업 등록 : cron, crontab

j9m 2022. 10. 11. 19:24
반응형

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급 정복하기 
반응형