Cron/Crontab 간단 정리.

crontab 작업 보기

$ crontab -l

crontab 작업 모두(!) 삭제

$ crontab -r

묻지도 따지지도 않고 확 지워버리니 주의해야 한다. 다시 살릴 방법도 없다.

crontab 편집

$ crontab -e

cron 작업은 man 5 crontab 로 자세히 확인할 수 있다.

형식은 다음과 같다.

분 시 일 월 요일 명령
  • 분 : 0~59
  • 시 : 0~23
  • 일 : 1~31
  • 월 : 1~12
  • 요일 : 0~6 (또는 Sun ~ Sat, 0 은 7로 써도 된다.)

그리고.. * 를 써서 전체를 선택할 수 있다. 예를 들어, 매 5분에 작업을 실행하려면,

5 * * * * 명령

이렇게 해준다.
한 줄에 명령 하나가 기본이지만, 명령을 2개 이상 주고 싶다면 세미콜론(;)으로 구분해준다.

….
매 분 계속 하려면, 별 다섯개를 주면 된다.

* * * * * 명령

2시간 마다 작업을 하기 원한다면, */2 로 할당한다.

* */2 * * * 명령

몇몇 반복 작업을 위해서, 특별 지정된 예약어를 쓸 수도 있다.

              string         meaning
              ------         -------
              @reboot        Run once, at startup.
              @yearly        Run once a year, "0 0 1 1 *".
              @annually      (same as @yearly)
              @monthly       Run once a month, "0 0 1 * *".
              @weekly        Run once a week, "0 0 * * 0".
              @daily         Run once a day, "0 0 * * *".
              @midnight      (same as @daily)
              @hourly        Run once an hour, "0 * * * *".

이런 식이다. 자세한 건 man page 참고.

단!!! 이 한가지 때문에 또 꽃삽질을 했더랬다.

시험삼아 이런 명령을 내려봤다.

30 * * * * echo $(/bin/date +%Y%m%d-%H%M) >> /tmp/aaaaa.txt

근데, 안된다.
왜 안되는지 이리 저리 뒤지다가.. 결국 답은 또 파랑새였음을 깨달았다.

Percent-signs (%) in the command, unless escaped with backslash (), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.

Man Page 에 나와있는 내용을 못보고 지나갔었다.. 이런 젠장.

제대로 명령을 내리려면, % 를 Escape 시켜줘야 한다. 따라서 다음과 같이 바꿔줘야 한다.

30 * * * * echo $(/bin/date +\%Y\%m\%d-\%H\%M) >> /tmp/aaaaa.txt

이런 문제가 있으므로, 뭔가 복잡한 명령을 내릴 때는 스크립트 파일을 따로 만들어서 실행시키는 편이 더 좋겠다.

root 용??
crontab 에 사용자를 명기(明記)하는 방법도 있으나, 간단하게 sudo 를 사용하면 된다.

$ sudo crontab -e

마지막으로..

crontab 사용자 파일 위치.

/var/spool/cron/crontabs

문제는, 개인 사용자는 저 위치로 이동할 수가 없다는 점.
복사본을 만들려면, crontab -e > ~/crontab-backup 등의 응용이 필요하다.

안녕하세요. 글 남겨주셔서 고맙습니다.