cron.daily作业未运行


19

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

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


2
请确保您创建的cron.daily /每周/小时/等可执行只是做在chmod + X /etc/cron.daily/whatever文件
图尔古特Kalfaoglu

Answers:


6

通常有两种可能的怀疑因素导致cron作业无法运行。

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

  • 将cron作业放入当前用户的crontab类型 crontab -e
  • 将cron作业放入root的crontab类型 sudo crontab -e

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

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

正如社区维基提到的

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


那我只把文件名放在那里吗?
sonicboom

实际上,这是说没有用于root的先前的cron作业,您将要编写第一个作业,然后要求您选择一个编辑器来修改crontab。只需从菜单中选择一个(1.bin / ed等)。选择nano很简单,只需注意说明即可。
Stef K

因此,要每天晚上10点运行一次,我会把* 22 * * * test> rkhunter.sh正确吗?
sonicboom

太棒了!我现在就试试吧!
sonicboom

test> rkhunter.sh的用途是什么?
sonicboom

75

根据响应,问题在于.sh扩展名。删除该文件(例如,将文件从rkhunter.sh重命名为rkhunter。

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

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


1
这是我一直在寻找的答案,经过各种测试,我意识到执行了另一个没有sh扩展名的脚本文件
AlbertCatalà16

5
正如@rharriso在回答中所说。它与“ .sh”无关,而与“。”无关。具有任何扩展名的任何文件都将丢失。直接引用man run-parts“名称必须完全由ASCII大写和小写字母,ASCII数字,ASCII下划线和ASCII减连字符组成”
Northern-bradley

10

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

跑:

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

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


10

在我的系统中,这是因为未安装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


1
+1默认情况下未安装anacron吗?我本来希望如此。我认为这将为我解决。谢谢。
lepe 2015年

果然,它不在我的那里。FFS,我确定它是正确的,因为该脚本是在几个月前执行的!:dpkg --get-selections | grep cron.. <
swears

是的,我也不知道发生了什么,因为它通常是在启动时安装的软件包。
纳蒂姆

9
这不是真的正确。anacron没必要 如果未安装anacron ||,则crontab命令中的运算符将执行run-parts。当anacron安装时,它使那些每天/每周/每月run-parts的命令是多余的。
TalkLittle '02

也许是因为运行部件不起作用?无论如何,安装anacron都会为我修复它。
纳蒂姆

5

除了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


4

重命名您的文件不具有.sh扩展名

要验证这是问题,请尝试

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

您会看到它没有列出。因此运行:

mv script.sh script

然后尝试再次列出。应该列出。


此问题似乎会影响具有扩展名的任何可执行文件。我有一个文件名“ filename.ca”,它也不会列出它,直到我也将其重命名为“ filename”
kiwicomb123 '18

0

我无法使它与anacron一起运行,我从anacron上移除了它/etc/crontab并执行了apt remove --purge anacron它,它马上就起作用了。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.