본문 바로가기
카테고리 없음

Crontab 사용법

by 뷰티풀스택 2023. 4. 8.
반응형

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 권한 없이 별도 설정파일 세팅없이 바로 쓸 수 있어서 실무에 자주 사용할 것 같다.

반응형

댓글