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
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
添加到 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
.
有两种可能的原因通常会导致cron
作业无法运行。
第一个是权限问题,即用户可以运行脚本/命令但 cron 守护进程不能运行,因为该作业位于错误用户的 cron 作业中。例如,用户使用提升的权限创建脚本或运行命令,即 using sudo
,然后将测试的脚本/命令添加到他的 cron 作业列表 ( crontab
)。结果是用户的 cron 作业将无法运行,因为它需要提升权限。
crontab -e
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)
并尝试再次列出。应该列出来。