행궁동 데이터 엔지니어

반응형

리눅스에서 crontab 명령어를 사용해 주기적인 프로세스 실행을 예약하는 방법입니다.

일전에는 at 명령어를 사용해 1회성의 작업을 예약하는 방법에 대해 이야기했습니다. 

crontab을 사용하면 정기적으로 하는 작업을 간단하게 자동화 할 수 있습니다.

  • ex 1) 매일 02:00에 데이터 압축 및 백업
  • ex 2) 매주 토요일 23:55분에 웹서버 재기동 등

- 목차 -

1. crontab 사용방법(설정 방법) 

2. crontab 예제

  • 2.1. /etc/crontab 파일 편집 예제

  • 2.2. crontab -u [계정명] -e 예제

3. 기타 (/var/log/cron, cron log가 저장되는 경로)

 

1. crontab 사용방법

crontab은 cron daemon의 계획표 파일입니다.

따라서 crontab에 실행할 계획을 설정해두면 cron daemon이 해당 내용을 계획에 따라 실행하게 됩니다.

crontab을 설정하는 방법은 크게 2가지가 있는데요.

 

첫 번째는 /etc/crontab 파일에 직접적으로 실행 계획 설정하는 방법, 두 번째는 crontab -u [계정명] -l 명령어를 이용해 설정하는 방법입니다

  • crontab -u 계정명 -e 명령어를 사용해도 결국 /var/spool/cron/계정명 으로 cron 계획표 파일이 생성됩니다

각각의 경우에 설정 명령어가 '조금' 다른데요.

/etc/crontab 파일을 수정할 경우에는 실행할 '계정명(user-name)'을 추가로 넣어줘야 합니다. 

  • /etc/crontab 설정 : * * * * * user-name  command to be executed

  • crontab -u [계정명] -e 설정 : * * * * * command to be executed

다음으로는 crontab 시간 설정 규칙과, 위의 2가지 설정 방법 예제를 보겠습니다.

2. crontab 예제

crontab의 시간 설정 규칙은 아래와 같습니다.

*(아스테리스크) 5개로 분, 시간, 날짜, 월, 주를 설정할 수 있고, [user-name] [command] 또는 [command]가 들어가게 됩니다.

  • /etc/crontab 에 설정 시 * * * * * [user-name] [command]
  • crontab -u [useranme] -e 로 설정 시 * * * * * [command]

# Example of job definition (/etc/crontab) :
# .---------------- 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

 

시간 설정 관련하여 추가적으로 궁금하신 분들은 아래 링크에 시간 설정 관련하여 예제가 잘 정리되어 있으니 참고하시거나 man crontab을 봐주세요.

 

https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%B0%98%EB%B3%B5_%EC%98%88%EC%95%BD%EC%9E%91%EC%97%85_cron,_crond,_crontab

 

리눅스 반복 예약작업 cron, crond, crontab - 제타위키

cron, cronie, crond, cron daemon, crontab, cron job, crontab job 크론, 크론 데몬, 크론탭, 크론작업, 리눅스 작업 스케줄러 /usr/sbin/crond /usr/bin/crontab 프로세스 예약 데몬 리눅스용 작업 스케줄러 특정시각에 명령어가 수행되도록 등록가능 cronie(패키지) = crond(데몬) + crontab(크론 계획표[1]) 로그: /var/log/cron에 변경/수행 이력이 기록됨

zetawiki.com

man crontab

2.1 /etc/crontab 파일 편집 예제

  • /etc/crontab 파일에 작업 설정 시 * * * * * [user-name] [command] 형태로 설정해줘야 합니다.

  • 아래는 제가 테스트한 코드입니다.
sudo nano /etc/crontab
*/2 * * * * one sh /home/one/command_test/cron/print_date.sh 2>> /home/one/command_test/cron/error.log
systemctl restart crond
  • 2분마다(*/2) print_date.sh 파일이 실행되도록 설정한 내용입니다.
  • 아래 print_date.sh 파일을 실행하면 /home/one/command_test/cron/data.txt 파일에 현재시간을 기록하게 됩니다.
  • 혹시 오류가 발생하면 /home/one/command_test/cron/error.log에 오류 내용이 저장되도록(2>>) 설정했습니다.
  • systemctl restart crond는 설정 적용을 위해 cron daemone을 재시작한 부분입니다.

/etc/crontab 에 설정한 내용
설정 후 data.txt 파일에 기록되는 모습

 

2.1 crontab -u [계정명] -e 설정 예시

  • crontab -u [계정명] -l 로 계획을 설정할 경우 * * * * * [command] 형태로 설정해줘야 합니다.

  • 아래는 제가 테스트한 코드 입니다.
sudo crontab -u one -e
*/5 * * * * sh /home/one/command_test/cron/print_date.sh 2>> /home/one/command_test/cron/error_one.log
sudo crontab -u one -l
sudo ls -lh /var/spool/cron
sudo cat /var/spool/cron/one
systemctl restart crond <- 굳이 안해도 적용 됩니다. 혹시를 위해 했습니다.
  • 5분마다(*/5) print_date.sh 파일이 실행되도록 설정한 내용입니다.
  • 이외의 내용은 /etc/crontab에 설정한 내용과 동일하고 추가된 부분만 설명드리겠습니다.
  • crontab -u one -l 은 one 계정에 설정된 계획표(crontab)을 확인하는 명령어( -l 옵션) 입니다.
  • /var/spool/cron 은 계정별로 설정된 계획표 파일이 저장되어 있는 경로입니다.
  • cat /var/spool/cron/one 으로 one 계정에 설정된 crontab 내용을 확인한 결과 동일한 것을 확인할 수 있습니다.

crontab -u [계정명] -e 명령어로 작업예약 설정
crontab -u [계정명] -l 과 /var/spool/cron 확인
설정 후 data.txt 파일에 기록되는 모습

 

아래는 제가 crontab 설정할 때 사용하는 엑셀 파일 입니다. 혹시 필요하신 분은 다운받아 사용하시기 바랍니다.

crontab설정.xlsx
0.02MB

3. 기타 (/var/log/cron, cron log가 저장되는 경로)

혹시 cron 관련 실행 내역이 어디에 저장되는지 궁금하신 분들이 있을 것 같아 log 저장 경로를 남깁니다. 

/var/log/cron : cron log가 저장되는 경로

tail -n 5 로 제일 아래 5행만 확인해봤습니다.

 

혹시 궁금하신 사항은 댓글 남겨주시면 답변드리겠습니다. 감사합니다.

 

[1] 제타 위키, 리눅스 반복 예약 작업, https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%B0%98%EB%B3%B5_%EC%98%88%EC%95%BD%EC%9E%91%EC%97%85_cron,_crond,_crontab
[2] JDM's 님 블로그, 특수 기호/문자 읽는법, https://jdm.kr/blog/87

 

리눅스 1회성 명령어 실행 예약하는 방법(at 명령어)

https://mentha2.tistory.com/85

 

리눅스(Linux)에서 일회성 명령어 실행 예약하는 방법(at 명령어)

리눅스에서 at명령어를 사용해서 프로세스 실행을 예약하는 방법입니다. at명령어 프로그램을 사용하면 일회성의 프로세스(명령어) 실행 예약을 매우 간단하게 할 수 있습니다. 만약 주기적으로 프로세스 실행예약..

mentha2.tistory.com

 

반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band