역쉬 개발자 왕!!초보이다보니 아~~ 이런것도 있구나~ 하고 있었다 ;;;
혹시 다음에 또 쓸일 있을지 모르니 기억해두자!!^^
1. cron
- 일정시간 마다 시스템에서 자동으로 실행 시키는 데몬(Windows의 작업스케줄러와 비슷한 기능)
- cron을 사용할때 crontab이라는 명령을 이용해서 실행(/etc/crontab)
- 각 사용자가 등록한 crontab은 [리눅스 : /var/spool/cron/사용자명, 솔라리스 : /var/spool/corn/crontabs/사용자명] 저장됨
- 현재 cron deamon이 돌고 있는지 확인
ps -ef | grep cron
- cron deamon kill
kill -9 "pid of cron"
- deamon 재실행
/usr/sbin/cron
2. cron 데몬의 실행과 종료
실행 : /etc/rc.d/init.d/crond [start/restart/stop]
3. crontab
- 지정된 시간에 다른 프로그램을 실행하면서 연속적으로 실행하는 프로그램
- 유사한 명령으로는 at 명령어가 있음
4. crontab와 at 명령어의 차이점
- crontab : 일정한 간격으로 계속해서 명령을 실행함
- at : 지정된 명령을 한번밖에 수행하지 않음
5. crontab 옵션
#crontab [파일][-u사용자] crontab을 사용자파일로 대체
#crontab -[-u사용자] crontab을 표준입력으로 대채
#crontab -l[사용자] 사용자를 위한 리스트를 보여줌
#crontab -e[사용자] 사용자를 위한 crontab을 에디트 함
#crontab -d[사용자] 사용자를 위한 crontab을 제거
6. crontab 작업형식
[MM] [HH] [DD] [mm] [d] [command]
필드 |
의미 |
범위 |
첫 번째 | 분 | 0~59 |
두 번째 | 시 | 0~23 |
세 번째 | 일 | 1~31 |
네 번째 | 월 | 1~12 |
다섯 번째 | 요일 | 0~7 (0,7 : 일요일, 1 : 월요일) |
여섯 번째 | 명령어 | 실행할 명령을 한줄로 쓴다. |
- 시간을 나타내는 각 필드에서는 와일드 카드'*'를 사용할 수 있음
- 각각의 요일을 구분할 때는 ','를, 연일을 나타날때는 '-'를 사용 즉, '1,3' : 월요일과 수요일, '1-5' : 월요일부터 금요일까지
- 한 줄당 하나의 명령 (두줄로 나눠서 표시할 수 없음)
- # 으로 시작하는 줄은 실행하지 않는다.
7. crontab 사용 방법
7-1) crontab 조회(-l 옵션)
[root@linux root]#crontab -l
→ 작업목록을 보여준다.
→ no crontab for truefeel(설정한 적이 없어 아직 비어있음)
7-2) crontab
[root@linux root]#crontab aaa
→ aaa 란 파일을 crontab 으로 사용(aaa 에는 이미 crontab 형식에 맞에 입력되어 있어야함)
7-3) crontab 설정(-e 옵션) : 환경변수 EDITOR에 따라 다른 에디터를 사용할 수 있음
※ 시간 설정 몇가지 의미
- '*'표시는 해당 필드의 모든 시간을 의미
- 3,5,7와 같이 콤마(,)로 구분하여 여러 시간대를 지정할 수 있음
- 2-10와 같이 하이픈(-)으로 시간 범위도 지정할 수 있음
- 2-10/3와 같이 하이픈(-)으로 시간 범위를 슬래쉬(/)로 시간 간격을 지정할 수 있다
(2~10시까지 3시간 간격으로. 즉, 3, 6, 9시를 의미함)
원하는 시간 형식
매주 토요일 새벽 2:20
20 2 * * 6 명령어
매일 오후 4,5,6시
0 4-6 * * * 명령어
매일 2시간 간격으로 5분대에
5 */2 * * * 명령어
매월 1일 새벽 1:15
15 1 1 * * 명령어
1,7월 1일 새벽 0:30
30 0 1 1,7 * 명령어
1. 매시 1회 자동실행하기 위한 시스템 크론 설정
01 * * * * root run-parts /etc/cron.hourly
- 매일 매시 01분마다 /etc/cron.hourly 디렉토리내에 존재하는 파일들을 실행
2. 매일 1회 자동실행하기 위한 시스템 크론설정
02 4 * * * root run-parts /etc/cron.daily
- 매일 새벽 4시 02분마다 /etc/cron.daily 디렉토리내에 존재하는 파일들을 실행
3. 매주 1회 자동실행하기 위한 시스템 크론설정
22 4 * * 0 root run-parts /etc/cron.weekly
- 매주 일요일 새벽 4시 22분마다 /etc/cron.weekly 디렉토리내에 존재하는 파일들을 실행
4. 매월 1회 자동실행하기 위한 시스템 크론설정
42 4 1 * * root run-parts /etc/cron.monthly
- 매월 1일 새벽 4시 42분마다 /etc/cron.monthly 디렉토리내에 존재하는 파일들을 실행
5. 설정예 : 한국표준시간 연구소에서 매일 새벽 1시에 표준시간을 가지고 오도록 설정할 경우
00 1 * * * root rdate -s time.kriss.re.kr && clock -w
6. 월,수,금 오전 4시에 notice 라는 문서의 내용을 메일로 발송한다.
0 4 * * 1,3,5 cat /root/notice | mail -s "notice" mailID@naver.com
7-4) root 이외의 사용자에게 crontab 명령어를 이용할 수 있게 하는 방법
- /etc/cron.allow 파일에 사용자의 id를 등록
- 일반사용자의 crontab 명령어 사용을 제안하고자 한다면 : /etc/cron.deny 파일에 사용자의 id 를 등록
7-5) FAQ
1) cron 설정한 후에는 crond 데몬을 재실행해야 하나요?
- 아닙니다. crontab -e 으로 설정 후 빠져나오면 바로 적용됩니다.
2) truefeel 사용자는 cron을 못 쓰게 하고 싶습니다.
/etc/cron.allow : 허용할 사용자 ID 목록
/etc/cron.deny : 거부할 사용자 ID 목록
cron.allow 파일이 있으면 이 파일에 들어있는 ID만 사용 가능
cron.deny 파일이 있으면 이 파일에 들어있는 ID는 사용 불가
따라서 cron.deny에 truefeel ID를 추가해주면 됩니다.
3) > /dev/null 2>&1 이 무슨 뜻입니까?
- 지정한 명령어 처리 결과와 발생할지 모르는 에러메시지를 출력하지 않고 모두 버린다는(/dev/null)는 뜻입니다.
만약 결과와 에러를 파일로 저장하려면 /dev/null 대신 파일명을 적어주면 됩니다.
/etc/crontab내용과 설명
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
#시간 단위로 실행시키 프로그램입니다.
# /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
# 월단위 입니다.
댓글 없음:
댓글 쓰기