- crontab 명령어는 사용자가 주기적인 작업을 등록하기 위해 사용
- crontab 명령어 형식
$ crontab [option] 파일명
1. crontab의 옵션
2. crontab 기본 (crontab basic)
- 기본이 되는 크론탭 사용법
- 편집할 수 있는 곳이 로딩 → 크론탭을 설정할 수 있는 장소에 접근
2.1. crontab -e 명령어를 통해 crontab 파일 수정
각종 크론탭 명령어를 입력후 콜론(:) 입력 후에 wq 를 입력해 크론탭을 갱신
wq로 저장하면 "crontab: installing new crontab"이 출력
q로 저장하면 "crontab: no changes made to crontab" 출력
$ crontab -e # crontab을 통해 편집할 수 있는 곳에 접근 */3 * * * * /opt/fujitsu/ServerViewSuite/RAIDManager/svrack/svrack.sh -c # srvmagtCron: restarts daemons that died 0,15,30,45 * * * * /bin/sh -c "[ -x /etc/srvmagt/srvmagtCron ] && /etc/srvmagt/srvmagtCron"
crontab -e 입력 후 다음과 같은 내용을 입력 → crontab 갱싱
별이 다섯개 뒤에 명령어 입력 → "매분마다 실행" 별이 지칭하는 것"
쉘스크립트 뿐만 아니라 리눅스 커맨드도 사용 가능
$ crontab -e # crontab 파일 내용 * * * * * ls -al # crontab 파일 내용을 수정한 후 wq!로 저장하면 아래의 내용 출력 no crontab for root - using an empty one crontab: installing new crontab # * * * * * 를 적용해서 매분마다 ls -al 실행
2.2 crontab -l 명령어를 통해 crontab 파일 읽기
현재 crontab에 어떤 내용이 들어있는지 확인
cat 명령어로 파일을 읽어들인 것처럼 표준 출력으로 크론탭 내용을 출력
$ crontab -l */3 * * * * /opt/fujitsu/ServerViewSuite/RAIDManager/svrack/svrack.sh -c # srvmagtCron: restarts daemons that died 0,15,30,45 * * * * /bin/sh -c "[ -x /etc/srvmagt/srvmagtCron ] && /etc/srvmagt/srvmagtCron"
2.3 crontab -r 명령어를 통해 crontab 파일 삭제
crontab -r 명령어를 통해 crontab 파일의 모든 내용 삭제
# crontab 삭제 $ crontab -r # 삭제되었는지 crontab 확인 $ crontab -l no crontab for root
3. 주기 결정
각 별 위치에 따라 주기를 다르게 설정 가능
순서대로 분-시간-일-월-요일 순서
괄호 안의 숫자 범위 내로 별 대신 입력 가능 → 숫자로 기간 결정
요일은 0부터 7까지 숫자로 표기
0과 7이 일요일
1은 월요일
2는 화요일
3은 수요일
4는 목요일
5는 금요일
6은 토요일
# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed * * * * * 분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7)
4. 주기별 예제
- 주기 입력 방법엔 * , - , / 을 이용
- 각각의 특수기호가 하는 기능이 다름
- * : 모든
- - : 3-5로 하면 3에서 5까지 기간을 지정
- / : 분에 */10을 하면 10분마다 반복할 수 있게 지정
- 조합을 어떻게 하느냐에 따라 입맛대로 주기를 설정 가능
4.1. 매분 실행
# 매분 test.sh 실행
* * * * * /home/script/test.sh
4.2. 특정 시간 실행
# 매주 금요일 오전 5시 45분에 test.sh 를 실행
45 5 * * 5 /home/script/test.sh
4.3. 반복 실행
# 매일 매시간 0분, 20분, 40분에 test.sh 를 실행
0,20,40 * * * * /home/script/test.sh
4.4. 범위 실행
# 매일 1시 0분부터 30분까지 매분 tesh.sh 를 실행
0-30 1 * * * /home/script/test.sh
4.5. 간격 실행
# 매 10분마다 test.sh 를 실행
*/10 * * * * /home/script/test.sh
4.6 조금 복잡하게 실행
# 5일에서 6일까지 2시,3시,4시에 매 10분마다 test.sh 를 실행
*/10 2,3,4 5-6 * * /home/script/test.sh
5. cron 사용 팁
5.1. 한 줄에 하나의 명령만 사용
# 잘못된 예
* * * 5 5
/home/script/test.sh
# 잘된 예
* * * 5 5 /home/script/test.sh
5.2. 주석을 사용 가능
# 을 입력해서 그 뒤로 나오는 모든 문자를 주석 처리 가능
# 주석 # #--------------------# # 이것은 주석입니다. # #--------------------#
6. cron 로깅 (cron logging)
6.1. crontab을 사용할 때 처리 내역을 로그에 남김
- 크론탭을 사용해서 정기적으로 작업을 처리할 때, 해당 처리 내역에 대해 로그를 남김
- /home/script/test.sh 쉘 스크립트를 매분마다 실행 → test.sh.log 파일에 작업 내용을 갱신
- 2>&1 을 제거하면 쉘스크립트에서 표준 출력 내용 출력
- 2>&1은 표준 에러를 표준 출력
* * * * * /home/script/test.sh > /home/script/test.sh.log 2>&1
6.2. crontab의 사용에 대한 처리 내역을 지속적으로 로그에 남김
- 자주 실행 되고 또한 지속적으로 로깅이 되야 해서 로그를 계속 남겨둬야 한다면 다음처럼 입력
- 계속 로그가 누적이 되는 것을 확인
- 로그가 과도하게 쌓이면 서비스에 영향 줌 → 가끔씩 비워주거나 파일을 새로 생성 필요
* * * * * /home/script/test.sh >> /home/script/test.sh.log 2>&1
6.3. crontab에 로그가 필요하지 않아 삭제
- 로그는 필요 없는 크론을 위해서 /home/script/test.sh.log 파일이 아닌 /dev/null에 저장
* * * * * /home/script/test.sh > /dev/null 2>&1
7. crontab 백업 (crontab backup)
- crontab -r 를 쓰거나 실수로 crontab 디렉토리를 날려버려서 기존 크론 내역들이 회복이 불가능할 수 있음
- 시스템 문제로 또는 실수로 크론탭이 삭제 될 수 있기에 주기적으로 크론탭 백업은 필수
7.1. crontab 백업하는 방법 → crontab 내용을 txt 파일로 만들어 저장
crontab -l > /home/bak/crontab_bak.txt
7.2. crontab 백업하는 방법 → crontab 내용을 txt 파일로 만들어 자동으로 저장
- 매일 오후 11시 50분에 크론탭을 백업해두는 크론 명령어
50 23 * * * crontab -l > /home/bak/crontab_bak.txt
'OS(운영체제) > 리눅스 명령어' 카테고리의 다른 글
pwconv 명령어 → Linux에 패스워드 정책을 shadow 패스워드 방식으로 적용 (0) | 2024.03.09 |
---|---|
dig 명령어 → DNS 이름 서버를 쿼리 (0) | 2023.09.16 |
powertop 명령어 → 시스템의 전력사용을 모니터링 (0) | 2022.07.21 |
turbostat 명령어 (CPU의 frequency와 idle 통계 확인) (0) | 2022.07.20 |
last 명령어 → 접속 로그 확인 명령어 (0) | 2022.07.18 |