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
등의 응용이 필요하다.