当前位置: 首页>>技术教程>>正文


cron.daily 作业未运行

, , ,

问题描述

我创建了 3 个每日 cron 作业来运行。

以下是放置在 etc/cron.daily 中的三个

猎头者sh

#!/bin/sh
(
rkhunter --versioncheck
rkhunter --update
rkhunter --cronjob --report-warnings-only
) | mail -s 'rkhunter Daily Run (my server)' [email protected]

chkrootkit.sh

#!/bin/bash
chkrootkit | mail -s "chkrootkit Daily Run (my server)" [email protected]

日志观察工具

#!/bin/sh
(
logwatch
) | mail -s 'logwatch Daily Log (my server)' [email protected]

当然,我用我的电子邮件替换了 [email\xa0protected]

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

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

最佳方法

根据this响应,问题出在.sh扩展名上。删除它(例如将文件从 rkhunter.sh 重命名为 rkhunter.sh)

要确认,请运行以下命令 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 要么删除 test -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 运行它们。

第五种方法

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

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

  • 要将 cron 作业放入当前用户的 crontab 中,请输入 crontab -e

  • 要将 cron 作业放入 root 的 crontab 中,请输入 sudo crontab -e

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

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

作为社区维基 mentions

您可能需要阅读有关 cron 的 community wiki,因为它提供了有关上述内容的更多详细信息。

第六种方法

将文件重命名为不包含 .sh 扩展名

要验证这是否是问题所在,请尝试

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

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

mv script.sh script

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14411.html,未经允许,请勿转载。