[Linux] cron(크론) 사용하여 작업 예약하기
cron(크론) 사용하여 작업 예약하기
리눅스의 크론을 이용하여 다양한 작업에 대한 설명입니다.
crontab 기본
명령어위치
/usr/bin/crontab
사용형식
crontab [ -u 사용자ID ] 파일
crontab [ -u 사용자ID ] { -l | -r | -e }
crontab 옵션
- -u user : 사용자 지정(root 사용자가 특정 사용자의 crontab 파일을 다루는 경우 사용)
crontab -e -u ban // root 권한자가 ban 사용자의 crontab 을 작성하거나 수정할때
crontab -u www-data -e // www-data 가 사용할 crontab 설정
- -e : crontab 파일을 작성하거나 편집
crontab -e
- -l : crontab 파일에 설정된 작업 리스트 출력
crontab -l
- -r : crontab 파일 삭제
crontab -r
-
-i : -r 옵션과 동일하지만 삭제 전에 삭제 여부 확인 메세지 출력
-
aaa 란 파일을 crontab 으로 사용할때
crontab aaa (여기서 aaa 파일은 crontab 형식에 맞게 입력되어 있어야 한다.)
crontab을 이용하여 예약된 작업 확인하기
[root@onstory /etc]# more crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
[root@onstory /etc]#
시간 예약하기
- 순서: 분 시 날짜 달 요일
- 분[0-59]
- 시[0-23]
- 날짜[1-31]
- 달[1-12]
- 요일[0-7]=> 0과 7은 일요일을 의미함
일정한 주기별로 수행할 작업 디렉토리 지정
- /etc/cron.hourly
매 시간 실행할 파일들을 저장할 디렉토리
- /etc/cron.daily
매일 실행할 파일들을 저장할 디렉토리
- /etc/cron.weekly
매주 실행할 파일들을 저장할 디렉토리
- /etc/cron.monthly
매달 실행할 파일들을 저장할 디렉토리
cron 사용하여 작업 예약하기 예제
매시간 마다 수행될 실행 파일 지정하기
[root@onstory /etc]# cd /etc/cron.hourly/
[root@onstory cron.hourly]# more test.sh
/bin/ls -al /etc/ > /root/etc_ls.txt
[root@onstory cron.hourly]# chmod 700 test.sh
[root@onstory cron.hourly]#
현재 시간을 세팅하기
[root@onstory cron.hourly]# date
Thu Aug 5 22:09:33 JST 1999
[root@onstory cron.hourly]# date --set="Thu Aug 5 22:00:40 JST 1999"
Thu Aug 5 22:00:40 JST 1999
[root@onstory cron.hourly]#
지정된 시간 기다리기
[root@onstory cron.hourly]# date
Thu Aug 5 22:00:42 JST 1999
[root@onstory cron.hourly]# date
Thu Aug 5 22:00:56 JST 1999
[root@onstory cron.hourly]# date
Thu Aug 5 22:01:01 JST 1999
[root@onstory cron.hourly]#
실행된 결과 확인하기
[root@onstory cron.hourly]# ls /root/etc_ls.txt
/root/etc_ls.txt
[root@onstory cron.hourly]#
실전 예제
크론 파일 열기
$ crontab -e
매 06시 마다 리눅스 시간을 업데이트 하기.
00 06 * * * su - root -c /usr/bin/rdate -s time.bora.net >& /dev/null ## 시간 update
SSU를 위한 server check
00 07 * * * su - root -c /root/bin/system_check >& /dev/null
*/5 * * * * su - root -c /root/bin/sbin/system_test >& /dev/null
php 스크립트를 크론에 걸기
*/10 * * * * php /home/myclub/2.php >/dev/null 2>&1
특정 디렉토리에 속하는 모든 스크립트 실행
run-parts 는 정의된 폴더에서 모든 실행가능한 스크립트를 실행한다.
30 4 * * * root run-parts /etc/cron.mysqldump
crontab 에 관한 상세 설명
crontab은 시스템의 주기적인cron작업의 설정, 수정등을 하는 명령어입니다.
시스템에서 가장 중요한 데몬(daemon)중의 하나인 cron와 직접적인 관련이 있는 명령어로서 수퍼유저(root) 또는 일반사용자들의 주기적이고 반복적인 특정 작업의 자동화를 설정하는 명령어입니다.
이 명령어로 설정한 작업이 주기적으로 실행되려면 cron 데몬이 실행상태에 있어야합니다.
그리고 cron 데몬은 /etc/init.d/cron스크립트에 의해 시작, 종료, 재시작될 수 있습니다.
cron 데몬에서 사용할 스케줄 정보는 /etc/crontab 화일과 /etc/cron.d 디렉토리 아래에 있는 모든 파일입니다.
그러니까 정리를 하면 cron 데몬은 부팅할때에 뜨고, 뜬 뒤에는 /etc/cron.d아래에 있는 모든 스케줄 정보 화일과 /etc/crontab 스케줄 정보 화일을 가지고 동작하게 됩니다.
따라서 crontab이라는 명령어를 정확하게 이해하고 사용하려면 다음과 같은 데몬과 파일들을 정확하게 이해하셔야 합니다.
- cron 데몬
- /etc/init.d/cron 스크립트
- /etc/crontab 파일(cron 설정파일)
- /var/spool/cron/crontabs 디렉토리내의 크론설정파일들
모든 사용자 crontab 설정 보기
시스템 환경에 따라 다르지만 /var/spool/cron/crontabs 에 사용자별 cron 설정 파일이 존재 한다.
cron 데몬
-
cron데몬파일 : /usr/sbin/cron
-
cron데몬의 시작/종료/재시작 : /etc/init.d/cron [start/stop/restart]
-
cron 실행확인 : ps ?ef | grep cron <- cron데몬파일(/usr/sbin/cron)
-
시스템크론 설정디렉토리 : /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly,/etc/cron.d
-
사용자크론 설정파일 : /var/spool/cron/crontabs/[사용자명] (사용자계정명과 동일한 파일명으로 존재함.)
-
사용자크론설정 명령어 : /usr/bin/crontab(즉, crontab 명령어)
cron에 작업을 설정하는 방법은 크게 2가지 입니다.
- /etc/crontab를 건드린다
- 사용자별 cron설정을 한다 <- 추천!
user commad 에서 각각이 의미하는 것은 다음과 같습니다
m : 분을 의미 (0 ~ 59 까지 사용)
h : 시를 의미 (0 ~ 23 까지 사용)
dom : 날짜를 의미 (1 ~ 31 까지 사용)
mon : 달을 의미 (1 ~ 12 까지 사용)
dow : 요일을 의미 (0 ~ 7 까지 사용, 0 과 7은 일요일을 나타냄)
user : 유저(실행권한)
command : 실행할 명령
- 구분자는 space 로 한다.
- crontab(cron 설정파일) - 사용자크론 설정
[crontab 옵션]
-l : 현재 crontab 에 의해 설정된 내용을 출력
cron설정파일을 쓰면 이것은 /var/spool/cron/crontabs/[사용자명]
(ex : /var/spool/cron/crontabs/root)으로 저장됩니다만 이 디렉토리로 접근하기 위해서는 root계정을 필요로 합니다.
그래서 설정된 cron명령 목록을 확인하기 위해선 # crontab -l 을 사용합니다.
예
-
*
: 각 필드에 해당하는 모든 숫자를 의미 합니다. 예를 들어 "일(day)"필드자리에 "*"로 설정되었다면 설정된 명령어가 매일 실행이 된다는 의미. -
/n
: n 마다 실행한다는 뜻이다. 분/3 3분마다, 시/2 2시마다 라는 뜻이다. -
-
: 일(day)필드자리에 "11-15"로 설정되어 있다면 11일, 12일, 13일, 14일, 15일을 의미. 그리고 시간(hour)필드자리에 "1-5"로 설정되었다면 1시, 2시, 3시, 4시, 5시를 의미. -
,
: 일(day)필드자리에 "1,11,21"로 설정되었다면 1일, 11일, 21일을 각각 의미. 그리고 시간(hour)필드자리에 "3,6,9"로 설정되었다면 3시, 6시, 9시를 각각 의미.
매 분마다 실행
* * * * * /home/script.sh
매시 05분 마다 실행
05 * * * * /home/script.sh
매시 10, 20, 30분에 실행
10,20,30 * * * * /home/script.sh
매시 10분 마다 실행
*/10 * * * * /home/script.sh
매일 05시 마다 실행
00 05 * * * /home/script.sh
월요일부터 금요일까지 12시에 실행.
0 12 * * 1-5 /home/script.sh
1월부터 10월까지 2개월마다 매1일 12시에 실행.
0 12 1 1-10/2 * /home/script.sh
월,수,금 오전 4시에 실행
0 4 * * 1,3,5 /home/script.sh
로그 출력
* * * * * cd /home/script.sh >> /dev/null // 출력하지 않음
* * * * * cd /home/script.sh >> /logs/script.log // /logs/script.log 파일에 출력
ㅇ 사용자 cron 설정시 사용명령어(crontab)
- 개별사용자의 cron설정 방법 : crontab ?e
- 개별사용자의 cron설정 확인 방법 : crontab ?l
- 개별사용자의 cron설정 삭제 방법 : crontab ?r
- root의 일반사용자 cron설정 방법 : crontab ?u 사용자명 ?e
- root의 일반사용자 cron설정 확인 방법 : crontab ?u 사용자명 ?l
- root의 일반사용자 cron설정 삭제 방법 : crontab ?u 사용자 -r
cron 사용자 제한( root사용자는 위의 두 파일에 영향을 받지 않는다.)
각 파일의 한 라인은 한명씩의 사용자 이름을 기록하면 된다. 기본적으로 /etc/cron.allow (허가목록) 과 /etc/cron.deny(거부목록) 파일이 없으므로 필요시 만들어서 사용하면 된다. ※ /etc/cron.allow (허가목록) 과 /etc/cron.deny(거부목록) 을 참조하게된다.
/etc/cron.deny 만 존재하는경우
기본적으로 모든사용자가 사용가능하고 cron.deny 에 등록된 사용자만 사용불가능하다.
/etc/cron.allow 만 존재하는 경우
cron.allow 파일에 등록된 사용자만 사용가능하다.
두 파일 모두 없을경우
모든 사용자가가능하다
두 파일 모두 있을경우
cron.deny 내용을 무시하고 cron.allow 명기된 사용자만 사용가능하다
*참고 : 로그파일
로그설정파일 초기설정=> vi /etc/syslog.conf을 열면 cron 로그파일 주석(#)처리 되어있음
#cron.*|.|...|...|.../var/log/cron.log(주석을 풀면 cron 로그파일 실행됨)
타임존
서버에서 설정된 time존을 기준으로 실행되므로 현재 서버가 UTC 인지 KST(한국시간)인지 확인 하여야 한다.
date
이렇게 호출하면
Wed 03 Jan 2024 06:37:06 PM KST // 한국시간일 경우
Tue Jan 3 01:29:56 UTC 2023 // UTC 일 경우
만약 UTC로 설정되어 있다면 현재 타임존을 변경하거나 혹은 한국시간을 기준으로 -9 시간을 하면 된다.
가령 12시에 특정 cron작업을 하고 싶을 경우 3 시로 설정하면 된다.
Table of contents 목차
- cron(크론) 사용하여 작업 예약하기
- crontab 기본
- crontab을 이용하여 예약된 작업 확인하기
- 시간 예약하기
- 일정한 주기별로 수행할 작업 디렉토리 지정
- cron 사용하여 작업 예약하기 예제
- 실전 예제
- crontab 에 관한 상세 설명
- 모든 사용자 crontab 설정 보기
- cron 데몬
- cron에 작업을 설정하는 방법은 크게 2가지 입니다.
- user commad 에서 각각이 의미하는 것은 다음과 같습니다
- 예
- 매 분마다 실행
- 매시 05분 마다 실행
- 매시 10, 20, 30분에 실행
- 매시 10분 마다 실행
- 매일 05시 마다 실행
- 월요일부터 금요일까지 12시에 실행.
- 1월부터 10월까지 2개월마다 매1일 12시에 실행.
- 월,수,금 오전 4시에 실행
- 로그 출력
- cron 사용자 제한( root사용자는 위의 두 파일에 영향을 받지 않는다.)
- 타임존