cron.daily工作没有运行

我创建了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。

如果我手动运行此cronjob它可以正常工作./nameoffile.sh

但它不是每天运行,可能是什么原因或我如何检查这个?

有两种可能的嫌疑人通常会导致cron作业无法运行。

第一个是权限问题,即用户可以运行脚本/命令但cron守护程序不能,因为作业是在错误的用户的cron作业中。 例如,用户创建脚本或使用提升的权限运行命令,即使用sudo ,然后将测试的脚本/命令添加到他的cron作业列表( crontab )。 结果是用户的cron作业将无法运行,因为它需要提升权限。

  • 将cron作业放在当前用户的crontab类型crontab -e
  • 在root的crontab中输入一个cron作业,输入sudo crontab -e

第二个原因是路径,为了确保脚本将执行,用户必须添加要在crontab中执行的脚本的完整路径。 另一种解决方案是通过将以下行放在其crontab文件的顶部来扩展root用户PATH变量:

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

作为社区维基提及 。

您可能希望阅读有关cron的社区维基 ,因为它提供了有关上述内容的更多详细信息。

根据这个回复,问题在于.sh扩展。 删除它(例如,将文件从rkhunter.sh重命名为rkhunter。

要确认运行以下命令run-parts --test /etc/cron.daily

如果您的脚本(rkhunter)包含在结果中,那么一切都很好。 有关run-parts命令的更多信息,请阅读man run-parts上的手册页

在我的系统中,这是因为没有安装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,要么删除测试-x / usr / sbin / anacron

我认为带有扩展名的文件会被忽略。

跑:

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

如果您没有看到列出的脚本,请删除.sh扩展名,然后重试。

添加到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运行它们。

将文件重命名为不具有.sh扩展名

要validation这是问题,请尝试

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

你会看到它没有列出。 所以运行:

 mv script.sh script 

并再次尝试列出。 它应该列出。

我无法用anacron运行它,我从/etc/crontab apt remove --purge anacron并执行了apt remove --purge anacron并且它可以立即运行。

我不明白为什么我们需要两个调度程序。