我创建了 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)' [email protected]
chkrootkit工具
#!/bin/bash
chkrootkit | mail -s "chkrootkit Daily Run (my server)" [email protected]
日志监控工具
#!/bin/sh
(
logwatch
) | mail -s 'logwatch Daily Log (my server)' [email protected]
我更换了[电子邮件保护]当然是用我的电子邮件。
如果我手动运行这个 cronjob,它可以正常工作./nameoffile.sh
但它并不是每天运行,可能是什么原因或者我该如何检查?
答案1
根据这响应,问题在于 .sh 扩展名。删除它(例如,将文件从 rkhunter.sh 重命名为 rkhunter)。
要确认,请运行以下命令run-parts --test /etc/cron.daily
如果您的脚本 (rkhunter) 包含在结果中,则一切正常。有关 run-parts 命令的更多信息,请阅读其手册页man run-parts
答案2
在我的系统中,这是因为没有安装 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
答案3
我认为带有扩展名的文件会被忽略。
跑步:
运行部分--测试/etc/cron.daily
如果您没有看到列出的脚本,请删除 .sh 扩展名并重试。
答案4
通常有两个可能的因素会导致cron
作业无法运行。
首先是权限问题,即用户可以运行脚本/命令,但 cron 守护程序无法运行,因为该作业位于错误用户的 cron 作业中。例如,用户使用提升的权限(即使用)创建脚本或运行命令sudo
,然后将测试的脚本/命令添加到他的 cron 作业列表(crontab
)。结果是用户的 cron 作业将无法运行,因为它需要提升的权限。
- 要将 cron 任务放入当前用户的 crontab 类型
crontab -e
- 要将 cron 任务放入 root 的 crontab 类型中
sudo crontab -e
第二个原因是路径,为了确保脚本能够执行,用户必须在 crontab 中添加要执行的脚本的完整路径。另一个解决方案是通过将以下行放在 root 用户的 crontab 文件顶部来扩展 PATH 变量:
PATH=/usr/sbin:/usr/bin:/sbin:/bin
作为社区维基提及。
你可能想读社区维基 关于 cron,因为它提供了有关上述内容的更多详细信息。