cron.daily 作业没有运行

son*_*oom 27 email command-line cron rkhunter

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

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

猎手.sh

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

chkrootkit.sh

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

日志文件

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

我当然用我的电子邮件替换了 me@email.com。

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

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

小智 88

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

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

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

  • 正如@rharriso 在他的回答中所说。与其说是“.sh”的问题,不如说是“.”的问题。任何带有任何扩展名的文件都会被遗漏。直接引用`man run-parts`“名称必须完全由 ASCII 大写和小写字母、ASCII 数字、ASCII 下划线和 ASCII 减号连字符组成” (11认同)

Nat*_*tim 15

在我的系统中,这是因为没有安装 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 )
Run Code Online (Sandbox Code Playgroud)

所以要么安装 anacron 要么删除 test -x /usr/sbin/anacron

  • 这并不正确。`anacron` 不是必需的;当 anacron 没有安装时,crontab 命令中的 `||` 操作符会执行 `run-parts`。安装 `anacron` 后,它会使那些每天/每周/每月的 `run-parts` 命令变得多余。 (11认同)

小智 11

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

跑:

 运行部分 --test /etc/cron.daily

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


Bra*_*iam 7

添加到 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
Run Code Online (Sandbox Code Playgroud)

您应该能够使用chmod +x filename.


Ste*_*f K 6

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

第一个是权限问题,即用户可以运行脚本/命令但 cron 守护进程不能运行,因为该作业位于错误用户的 cron 作业中。例如,用户使用提升的权限创建脚本或运行命令,即 using 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
Run Code Online (Sandbox Code Playgroud)

正如社区维基所提到的

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


小智 6

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

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

sudo run-parts --list /etc/cron.daily 
Run Code Online (Sandbox Code Playgroud)

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

mv script.sh script
Run Code Online (Sandbox Code Playgroud)

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