루트로 실행할 때 다양한 작업을 수행하여 웹 응용 프로그램을 실행할 Debian(9/stretch) 서버를 준비하는 쉘 스크립트가 있습니다. 이 스크립트가 수행하는 작업 중 하나는 heredoc 텍스트를 사용하여 crontab root
파일 에 cronjob 줄을 추가하는 것입니다.www-data
/var/spool/cron/crontabs/
cat
파일에 추가된 각 cronjob은 스크립트의 제거 기능을 사용할 때 사용할 수 있도록 태그 주석으로 둘러싸여 있습니다 sed
.
crontab -l
이것은 잘 작동하는 것 같습니다. 그러나 실제 crontab 파일을 직접 검사할 때는 여전히 존재하지만 crontab을 통해 볼 때 각 crontab의 처음 3줄이 표시되지 않는다는 것을 알았습니다 . 일부 연구에서는 이것이 데비안의 crontab 구현에 있는 의도적인 기능의 부작용이라고 제안합니다.crontab의 처음 3줄 숨기기왜냐하면 이 줄은 3줄의 "이 파일을 편집하지 마십시오" 헤더일 것으로 예상하기 때문입니다.
그러나 이전에 존재하지 않았던 crontab 파일에 추가하는 경우 해당 헤더가 존재하지 않으므로 생성되지 않습니다. 이것이 바로 crontab의 실제 처음 3줄이 숨겨지는 이유입니다.
어쨌든, 아마도 crontab 파일에 직접 쓰는 것은 올바른 일을 하고 있지 않을 것입니다. 시스템이 양호한 상태를 유지하도록 crontab에 자동으로 추가하거나 제거할 수 있도록 스크립트를 업데이트하려면 어떻게 해야 합니까?
(맨 페이지에서 CRONTAB_NOHEADER
3줄을 숨기지 않도록 N으로 설정할 수 있다고 읽었습니다.)
답변1
별도의 crontab을 운영하는 대신 /etc/cron*
디렉토리 기반 디렉토리에 crontab 기능의 일부를 넣는 것을 선택하겠습니다.
필요한 것은 /etc/cron*
스니펫을 실행할 필요/원하는 디렉토리에서 파일을 생성/제거하는 것이므로 관리하기가 더 쉬워 보입니다.
$ ls -ld /etc/cron*
-rw-------. 1 root root 0 May 2 10:54 /etc/cron.allow
drwxr-xr-x. 2 root root 4096 Jul 28 14:56 /etc/cron.d
drw-------. 2 root root 4096 Jul 28 14:56 /etc/cron.daily
-rw------- 1 root root 0 Apr 10 21:48 /etc/cron.deny
drw-------. 2 root root 4096 Jul 28 14:55 /etc/cron.hourly
drw-------. 2 root root 4096 Jun 9 2014 /etc/cron.monthly
-rw-------. 1 root root 451 Jun 9 2014 /etc/crontab
drw-------. 2 root root 4096 Jun 9 2014 /etc/cron.weekly