cron.daily 작업이 실행되지 않습니다


19

실행할 매일 3 개의 cron 작업을 작성했습니다.

다음은 etc / cron.daily에있는 세 가지입니다

rkhunter.sh

#!/bin/sh
(
rkhunter --versioncheck
rkhunter --update
rkhunter --cronjob --report-warnings-only
) | mail -s 'rkhunter Daily Run (my server)' me@email.com

chkrootkit.sh

#!/bin/bash
chkrootkit | mail -s "chkrootkit Daily Run (my server)" me@email.com

logwatch.sh

#!/bin/sh
(
logwatch
) | mail -s 'logwatch Daily Log (my server)' me@email.com

me@email.com ofcourse를 내 이메일로 교체했습니다.

이 cronjob을 수동으로 실행하면 정상적으로 작동합니다. ./nameoffile.sh

그러나 매일 실행되지 않습니다. 원인이 될 수 있거나 어떻게 확인할 수 있습니까?


2
cron.daily / weekly / hourly / etc에서 생성 한 파일이 실행 가능한지 확인하십시오 chmod + x /etc/cron.daily/whatever
Turgut Kalfaoglu

답변:


6

일반적으로 cron작업을 실행할 수 없게 만드는 두 가지 의심이 있습니다 .

첫 번째는 권한 문제입니다. 즉, 사용자가 스크립트 / 명령을 실행할 수 있지만 작업이 잘못된 사용자의 cron 작업에 있으므로 cron 데몬이이를 수행 할 수 없습니다. 예를 들어, 사용자는 스크립트를 작성하거나 높은 권한으로 명령을 실행합니다 (예 :을 사용 sudo). 테스트 된 스크립트 / 명령을 cron 작업 목록 ( crontab)에 추가합니다. 결과적으로 사용자의 크론 작업은 높은 권한이 필요하므로 실행할 수 없습니다.

  • 현재 사용자의 crontab 유형에 cron 작업을 넣으려면 crontab -e
  • 크론 작업을 루트의 크론 탭 유형에 넣으려면 sudo crontab -e

두 번째 이유는 경로입니다. 스크립트가 실행되도록하려면 사용자가 crontab에서 실행할 스크립트의 전체 경로를 추가해야합니다. 또 다른 해결책은 crontab 파일의 맨 위에 다음 줄을 넣어 루트 사용자 PATH 변수를 확장하는 것입니다.

PATH=/usr/sbin:/usr/bin:/sbin:/bin

커뮤니티 위키가 언급 한대로 .

cron에 대한 자세한 내용을 제공하는 cron에 대한 커뮤니티 위키 를 읽으십시오 .


그래서 파일 이름을 거기에 넣습니까?
sonicboom

실제로 루트에 대한 이전 크론 작업이 없으며 첫 번째 크론 작업을 작성한 다음 크론 탭을 수정하기 위해 편집기를 선택하도록 요청합니다. 메뉴에서 하나만 선택하면됩니다 (1.bin / ed 등). 나노를 쉽게 선택하고 지침에주의하십시오.
Stef K

그래서 하루에 한 번 오후 10시에 실행하려면 * 22 * ​​* * test> rkhunter.sh를 넣을까요?
sonicboom

아 대박! 지금 바로 해봐!
sonicboom

test> rkhunter.sh는 무엇입니까?
sonicboom

75

응답 에 따르면 문제는 .sh 확장자에 있습니다. 이를 제거하십시오 (예를 들어 파일 이름을 rkhunter.sh에서 rkhunter로 바꾸십시오).

확인하려면 다음 명령을 실행하십시오 run-parts --test /etc/cron.daily

스크립트 (rkhunter)가 결과에 포함되면 모든 것이 좋습니다. run-parts 명령에 대한 자세한 내용은 해당 매뉴얼 페이지를 참조하십시오.man run-parts


1
이것은 내가 다양한 테스트 후, 찾고 있던 답, 나는 쉬 확장없이 다른 스크립트 파일이 실행되는 것을 깨달았다
알버트 카탈루냐어을

5
@rharriso가 그의 답변에서 말했다시피. ".sh"의 문제는 "."의 문제가 아닙니다. 확장자가있는 모든 파일이 누락됩니다. 에서 직접 인용하는 man run-parts"이름은 문자, ASCII 숫자, ASCII의 밑줄 및 ASCII 마이너스-하이픈 대문자 ASCII의 전체 구성과의 경우 낮은해야한다"
북 - 브래들리에게

10

확장자가있는 파일은 무시된다고 생각합니다.

운영:

 run-parts --test /etc/cron.daily

스크립트가 표시되지 않으면 .sh 확장자를 제거한 후 다시 시도하십시오.


10

내 시스템에서는 anacron이 설치되지 않았기 때문입니다.

grep run-parts /etc/crontab

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

따라서 anacron을 설치하거나 test -x / usr / sbin / anacron을 제거하십시오.


1
+1 기본적으로 anacron이 설치되어 있지 않습니까? 나는 그것을 기대했을 것입니다. 나는 그것이 나를 위해 그것을 해결할 것이라고 생각합니다. 감사.
lepe

확실히, 그것은 내 위에 없었습니다 .. FFS, 몇 달 전에 스크립트가 실행되고 있었기 때문에 그것이 확실했습니다! : dpkg --get-selections | grep cron.. <
swears

예, 일반적으로 시작시 설치되는 패키지이므로 어떤 일이 발생했는지 알 수 없습니다.
Natim

9
이것은 실제로 올바르지 않습니다. anacron필요하지 않습니다; ||crontab 명령 의 연산자는 run-partsanacron이 설치되지 않은 경우 실행 됩니다. anacron설치 되면 매일 / 매주 / 매월 run-parts명령이 중복됩니다.
TalkLittle

런 파트가 작동하지 않았기 때문일 수 있습니다. 어쨌든 anacron을 설치하면 문제가 해결되었습니다.
Natim

5

Stef 응답에 추가하여 실행 가능한 비트가 있는지 확인해야합니다.

$ ls -l
-rwxr-xr-x  1 root root   268 Jun  1 08:06 00logwatch
-rwxr-xr-x  1 root root   311 May 22  2012 0anacron
-rwxr-xr-x  1 root root 15007 Jun  6 14:08 apt

를 사용하여 실행할 수 있어야합니다 chmod +x filename.


4

.sh 확장자를 갖지 않도록 파일 이름을 바꾸십시오.

이것이 문제인지 확인하려면

sudo run-parts --list /etc/cron.daily 

목록에없는 것을 볼 수 있습니다. 그래서 실행하십시오 :

mv script.sh script

다시 나열 해보십시오. 나열되어야합니다.


이 문제는 확장명을 가진 실행 파일에 영향을 미치는 것 같습니다. 파일 이름이 "filename.ca"이고 이름이 "filename"으로 바뀌기 전까지는 나열되지 않았습니다.
kiwicomb123

0

나는 anacron으로 실행할 수 없었고, anacron을 제거 /etc/crontab하고 실행 apt remove --purge anacron했으며 즉시 작동합니다.

왜 우리가 두 개의 스케줄러가 필요한지 이해하지 못합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.