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
并且它可以立即运行。
我不明白为什么我们需要两个调度程序。