crontab을 처음 사용할때에 제일 헷갈렸던 부분은 시간을 정하는 부분일 것이다. 특히, crontab을 사용하는 이유는 일정한 주기로 반복되는 작업에 쓰려고 하기 때문에 시간도 몇분 또는 몇 시간 등의 간격으로 생각하기 때문에 헷갈리게 되는 것이다. 결론은 숫자는 해당되는 시간 그 자체를 의미하고 * 별표는 반복으로 보아야 한다.
1. Crontab 다섯자리 이해
crontab은 제일 뒤에 있는 단위는 월 화 수 등의 요일인데 이 개념은 무시하고 항상 * 별표로 나두고 앞의 4자리만을 신경쓰는편이 좋다. 읽는 법은 뒤에서 부터 읽어가면 이해하기 쉽다. 아래의 예를 보자.
- 매월 매일 매시 매분 마다 hello world를 로그에 남겨라

- 매월 매일 매시 5분에 hello world를 로그에 남겨라. 다시 한번 강조하지만 5분마다가 아니라 매시간별로 5분이 되면 동작하라는 것이다. 즉, 5분, 10분, 15분, ... 이 아니라 1시 5분, 2시 5분, 3시 5분,...이 되면 동작하는 것이다.


그렇기 때문에 아래는 매월 매일 매시 17분이 되면 동작하게 된다. 17분, 34분, 51분, ... 이 아님을 꼭 기억하기를 바란다.

- 매월 매일 06:00에 hello world를 로그에 남겨라. 이것도 6시간 간격으로 동작하라는 것이 아닌 새벽 6시 정각에만 매일 반복하라는 의미이다.

참고로, 상위 단위 (분 < 시 < 일 < 월) 에 숫자를 적게 되면 하위 단위에는 절대 * 별표가 올 수 없다. 왜냐하면 예를들어 특정 시간에만 동작하도록 세팅하려고 하는데 매분을 의미하는 * 별표가 분 자리에 있게 되면 매분 동작하는데 6시에만 동작하라는 명령은 무의미 하기 때문이다. 그러므로, 상위 단위에 숫자를 적었으면 하위 개념에도 숫자를 표기해야 한다. 보통 0을 자주 쓴다.

2. Crontab 명령어
crontab은 sudo 를 붙일 필요없이 그냥 현재 사용자 권한으로 사용하면 된다. 그리고, 명령어는 딱 2가지만 알면된다.
- -e: crontab 스크립트를 적을 수 있도록 편집기를 열어준다. 저장하고 save 하면 그 순간부터 바로 자동으로 적용된다.
crontab -e
---------------------
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
0 0 * * * sudo /snap/bin/certbot renew --post-hook "sudo service nginx reload" >> /home/ubuntu/logs/certbot.txt
- -l: 등록한 작업이 무엇인지 볼 수 있도록 조금전 편집기에서 작업한 내용을 그대로 보여준다.
개인적으로 특별한 root 권한 없이 별도 설정파일 세팅없이 바로 쓸 수 있어서 실무에 자주 사용할 것 같다.
댓글