매일 혹은 정기적으로 실행해야 하는 예약작업이 있다.
리눅스에서는 이런 일을 해 주는 것이 cron이다.
cron은 간단한 텍스트 파일에 할 일들을 기록하는데, 관리자인가 아닌가에 따라서 기록할 곳이 달라진다.
- 관리자 권한이 있다면 /etc/crontab 파일에 기록한다.
- 이 파일에 기록하면 한 눈에 예약 작업을 확인할 수 있다는 장점이 있고, 명령을 실행할 사용자도 명시할 수 있다. 따라서 관리자 권한에 접근할 수 있다면 여기에 기록하자.
- 관리자 권한이 없다면 crontab -e 명령어를 실행해서 예약 파일을 편집한다.
- /etc/crontab 파일을 편집할 때와 달리 실행할 주체를 명시하는 부분이 없다.
root 권한 있는 경우 - /etc/crontab 편집
root 권한이 있는 경우 /etc/crontab 파일을 편집한다.
우분투의 crontab 파일은 아래처럼 생겼다.
sudo vi /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
맨 위에 주석으로 설명이 달려 있다.
“시스템 전반에 관여하는 크론탭이다. 다른 크론탭과 달리 사용자명을 적는 필드가 있다.”
SHELL은 cron을 실행할 쉘을 적어 주는 부분이고, PATH는 cron을 실행할 때의 $PATH다
. 사용자의 것과 다르니 유의해야 한다.
맨 밑의 4줄이 예약 작업 규칙과 명령어를 적어 주는 부분이다. 탭 혹은 띄어쓰기로 구분한다. 밑에서부터 5번째줄을 보면 각 열의 의미를 설명한 주석이 보인다:
# m h dom mon dow user command
- 맨 앞의 다섯 열이 실행 시간 규칙을 적는 부분
- 그 다음이 실행할 사용자를 적는 부분
- 그리고 그 다음이 실행할 명령어를 적는 부분이다.
m h dom mon dow의 의미는 뒤에서 설명한다.
root 권한 없는 경우 - crontab -e
root 권한이 없는 경우에는 crontab -e를 실행한다.
환경변수에 에디터가 설정돼 있지 않으면 어떤 에디터를 쓸 거냐고 묻기도 한다.
nano를 추천한다고 씌어 있다. 터미널 에디터에 익숙지 않다면 나노를 사용하자.
나노는 저장하고 종료하려면 ctrl-x를 누른다. 변경사항이 있으면 저장할 거냐고 묻는데 y라고 쓰고 엔터치면 된다.
우분투의 경우 crontab -e로 처음 들어가면 아래와 같은 기본 설정이 나온다. 아무 예약 작업도 없고, 주석만 있다.
맨 아랫줄을 보면 m h dom mon dow command 하고 각 열을 설명하는 주석이 있는데,
/etc/crontab과 달리 username 열이 없다.
시간 설정하는 방법 - m h dom mon dow
이제 시간 설정을 어떻게 하는지 알아 보자.
- m: 분
- h: 시
- dom: day of month, 즉 일
- mon: 월
- dow: day of week, 즉 요일
서버의 시간 설명을 따른다. 한국 시각을 따라야 하는 서버라면 한국 표준시(KST)로 설정돼 있는지 확인하자.
0 5 * * *
위처럼 적으면 매일 5시에 명령을 실행하라는 말이다.
첫 번째 0은 분이라고 했다. 0이라고 쓰면 0분에 실행한다. 5라고 실행하면 5분에 실행한다.
혼동하지 말아야 할 것은 “5분마다” 실행하는 게 아니라 5분에 실행한다는 점이다. (*을 적으면 매분, 즉 1분마다 실행하는 게 된다.)
만약 5분마다 실행하고 싶다면 */5라고 적는다.
두 번째 5는 5시에 실행하라는 거다. 역시 5시간마다 실행하라는 게 아니다. 역시 *을 적으면 매시간마다, 즉 1시간마다 실행하라는 게 된다.
세 번째 *은 매일 실행하라는 뜻이 된다. 만약 여기 5를 적으면 5일에 실행하라는 뜻이 된다. 한 달에 한 번 실행하고 싶다면 여기 숫자를 적는다.
네 번째 *은 매달 실행하라는 뜻이 된다. 만약 여기 1을 적으면 1월에 실행하라는 뜻이 된다. 1년에 한 번만 실행할 게 아니라면 당연히 *을 적어야 할 거다.
다섯 번째 *은 요일에 관한 거다. 0~6 사이의 숫자를 입력한다. 0은 일요일, 6은 토요일이다. 매주 수요일에 실행하고 싶으면 3이라고 적는다. *을 적으면 역시 매일 실행하는 것이 된다.
그래서 다섯 개의 숫자 혹은 별을 조합하면 cron이 언제 이 명령을 실행해야 하는지가 나오는 거다. 예를 몇 개 들어 보자.
- 0 5 * * * : 매일 5시 0분에 실행.
- 5 * * * * : 매시 5분이 될 때마다 실행. 즉, 한 시간 간격으로 실행.
- * * * * * : 1분에 한 번씩 실행.
- 0 5 1 * * : 매달 1일 새벽 5시에 실행.
그럼 5분에 한 번씩 혹은 5시간에 한 번씩 실행하고 싶으면 어떻게 적어야 하는가? 아래처럼 적는다.
- */5 * * * * : 5분에 한 번씩
- 0 */5 * * * : 5시간에 한 번씩
물론 저 뒤에 실행할 명령어를 적어 줘야 한다는 점을 잊으면 안 된다.
마지막으로, 쉼표를 사용할 수 있다.
- 0 5,11 * * * : 새벽 5시와 밤 11시.
- 0 5,11 * * 0,3 : 매주 일요일과 수요일 새벽 5시와 밤 11시.
이렇게 적으면 된다.
사용자와 명령어
/usr/local/bin/script.sh를 매분 실행하게 한다고 가정하자. /etc/crontab에 적는다면 아래처럼 적는다.
* * * * * www-data /usr/local/bin/script.sh
crontab -e로 적는다면 아래처럼 적는다.
* * * * * /usr/local/bin/script.sh
사용자를 명시했는지만 차이가 있다. crontab -e의 실행 사용자는 작성자 자신이 된다.
실행 로그는 어디서 볼 수 있을까?
cron이 실행되면 /var/log/syslog에 실행이 됐다고 남는다.
실행 결과의 출력값이 syslog에 기록되는 것은 아니다.
명령어 실행 결과를 리디렉트하지 않으면 cron은 결과를 메일로 보낸다.
서버에 메일 발송 시스템이 돼 있지 않다면 이메일 내용은 /var/mail/{사용자명} 파일에 기록되게 된다.
■ [AWS] Systems Manager용 Cron 및 비율 표현식!!
https://cloud-allstudy.tistory.com/2787
■ [부자생활 #1][비상식적 성공 법칙][완독] 부의 추월차선에 올라타는 가장 강력한 8가지 습관!!
https://cloud-allstudy.tistory.com/2089
출처 :
https://yangyag.tistory.com/358
https://mytory.net/archives/601
'[OS] > Linux' 카테고리의 다른 글
[Linux] 권한 관리 명령어 사용 방법(chmod, chown, chgrp) (0) | 2022.09.14 |
---|---|
[Linux] sudo, sudoers에 대해서 (0) | 2022.09.05 |
[Linux] ssh port 변경 (0) | 2022.09.01 |
[Linux] 어떤 Linux 파일 시스템을 사용해야합니까? (1) | 2022.09.01 |
[Linux] scp 명령어 사용법 (0) | 2022.08.24 |
[AWS][Linux] fstab 정의 및 옵션 (0) | 2022.08.10 |
[명령어] sar 설명 (0) | 2022.07.18 |
Linux - chmod 명령어 사용 방법 (권한, 모드 변경) (0) | 2022.07.18 |
댓글