Translate

2024/05/23

crontab

crontab

유닉스/리눅스 운영체제에서 사용하는 시간 기반 job 관리 스케줄러이다. 반복적인 작업을 실행하는 가장 기본적인 프로그램이다. 아래 그림은 cron을 사용하는 방법을 요약한 내용이다.

# * * * * *  command to execute
# ┬ ┬ ┬ ┬ ┬
# │ │ │ │ │
# │ │ │ │ └───── day of week (0 - 7)
# │ │ │ └───────── month (1 - 12)
# │ │ └───────────── day of month (1 - 31)
# │ └───────────────── hour (0 - 23)
# └───────────────────── min (0 - 59)

출처: https://blog.nexcess.net/2014/02/06/cron-job-for-every-three-days/


‘분시일월요’ 형식으로 시간이 입력되고 그 다음 실행파일을 적어주면 된다. 매우 간단하지만 몇가지 주의사항이 있다. 주의사항과 예시를 참고하여 사용하도록 하자.



사용시 주의사항

  1. 한줄에 하나의 명령만 쓴다.
* * * 5 5	/home/script/test.sh
  1. 시스템 환경변수 설정을 참조하지 않기 때문에 쉘스크립트 상에 첨부하거나 실행파일의 경우 아래와 같이 설정을 한다! (이러한 설정을 하지 않으면 크론이 job을 실행하지만 실제 프로그램이 구동되지 않을 수 있다.)

크론탭 설정 맨 위에 아래 내용을 추가한다.

[USER]$ crontab -e
	SHELL=/bin/bash
	PATH=/sbin:/bin:/usr/sbin:/usr/bin
	LD_LIBRARY_PATH=/usr/local/lib
	HOME=/
	...
	* * * * * ...
  1. 특수문자 %에 주의한다!

date 명령어의 +%Y%m%d%H%M%S와 같은 옵션에서 %는 크론탭에서 다음줄을 의미하기 때문에 이 옵션 사용시 반드시 '\'를 넣어서 구분해 준다.

0 0 * * * /some/job > ~/log/job_`date +\%Y\%m\%d\%H\%M\%S`.log 2>&1
  1. stdout 출력은 사용자의 메일로 보내진다.

특별한 설정이 없는 경우 standard output(명령 실행시 사용자의 터미널에 출력되는 내용)은 사용자의 메일로 보내진다. 로그를 남기기 위해서는 redirection을 사용하여 로그파일에 저장해야 한다.

읽어보기)

https://www.jefframnani.com/writing-a-good-cron-job/

https://www.endpoint.com/blog/2008/12/08/best-practices-for-cron



예시

# 매분 test.sh 실행

* * * * *   /home/script/test.sh

# 매주 금요일 오전 5시 45분에 test.sh를 실행

45 5 * * 5   /home/script/test.sh

# 매일 매시간 0분, 17분, 38분에 test.sh를 실행

0,17,38 * * * *   /home/script/test.sh

# 매일 1시 0분부터 30분까지 매분 tesh.sh를 실행

0-30 1 * * *   /home/script/test.sh

# 매 10분마다 test.sh를 실행

*/10 * * * *   /home/script/test.sh

# 매시 6분을 시작으로 10분 간격으로 test.sh를 실행

6-59/10 * * * *   /home/script/test.sh

# crond 재시작 방법

[root]# service crond restart

또는

[root]# systemctl restart crond

# 모든 사용자의 crontab 확인 방법 /var/spool/cron 디렉토리 안에 사용자 이름 파일로 확인 가능

# 시스템 job 확인 방법 아래 디렉토리에서 확인 가능

/etc/cron.d
/etc/cron.hourly
...


결론

cron은 유닉스/리눅스 운영체제에서 주기적인 작업을 자동화하는 데 유용한 도구입니다. 하지만 사용 시 몇 가지 주의사항을 지켜야 합니다. 한 줄에 하나의 명령만 쓰고, 시스템 환경변수를 직접 설정해야 하며, 특수문자 %는 이스케이프 처리해야 합니다. stdout 출력은 사용자 메일로 전송되므로 로그 파일 리다이렉션이 필요합니다. 다양한 cron 예제를 통해 매분, 매시간, 매일, 특정 간격 등 원하는 패턴으로 작업 스케줄링이 가능합니다. 마지막으로 사용자별 crontab과 시스템 cron 작업을 확인하는 방법도 숙지하면 좋습니다. 주의사항을 지키고 예제를 참고하여 cron을 적절히 활용한다면 주기적 작업 자동화에 많은 도움이 될 것입니다.



참고

https://jdm.kr/blog/2

http://forum.falinux.com/zbxe/index.php?document_srl=557396&mid=lecture_tip

https://blog.nexcess.net/2014/02/06/cron-job-for-every-three-days/

댓글 없음:

댓글 쓰기

Template by Aliya H.