我在 Linux (Ubuntu) 16.04 上。我有一组由/etc/cron.daily
anacron 处理的脚本。它们过去每天都运行良好,但我注意到它们最近没有运行。我不确定这是因为更新还是其他原因。这让我很抓狂,因为我已经尝试了所有我能想到的方法,却没有得到结果。以下是我到目前为止检查过的内容:
1)grep "Nov 22" /var/log/syslog | grep "cron.daily" -B 5 -A 5
:
Nov 22 06:24:47 ubuntu16 dbus[816]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Nov 22 06:24:47 ubuntu16 systemd[1]: Started Network Manager Script Dispatcher Service.
Nov 22 06:24:47 ubuntu16 nm-dispatcher: req:1 'dhcp4-change' [enp1s0]: new request (1 scripts)
Nov 22 06:24:47 ubuntu16 nm-dispatcher: req:1 'dhcp4-change' [enp1s0]: start running ordered scripts...
Nov 22 06:25:01 ubuntu16 CRON[6455]: (root) CMD (cupsenable HP-HP-OfficeJet-Pro-8710)
**Nov 22 06:25:01 ubuntu16 CRON[6456]: (root) CMD (test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ))**
Nov 22 06:30:01 ubuntu16 CRON[6485]: (root) CMD (cupsenable HP-HP-OfficeJet-Pro-8710)
Nov 22 06:35:01 ubuntu16 CRON[6513]: (root) CMD (cupsenable HP-HP-OfficeJet-Pro-8710)
Nov 22 06:39:01 ubuntu16 CRON[6536]: (root) CMD ( [ -x /usr/lib/php/sessionclean ] && /usr/lib/php/sessionclean)
Nov 22 06:40:01 ubuntu16 CRON[6583]: (root) CMD (cupsenable HP-HP-OfficeJet-Pro-8710)
Nov 22 06:45:01 ubuntu16 CRON[6612]: (root) CMD (cupsenable HP-HP-OfficeJet-Pro-8710)
因此,看起来 cron.daily 脚本正在运行,或者至少 anacron 尝试运行它,并且系统日志中没有错误。我还检查了 cron.daily 每天都会在系统日志中记录日志条目,这是应该的。
2)我确保我的脚本是可执行的ls -l /etc/cron.daily/
:
-rwxr-xr-x 1 root root 139 Nov 20 16:24 bingbot
-rwxr-xr-x 1 root root 142 Nov 20 16:24 bingbotb
-rwxr-xr-x 1 root root 142 Nov 20 16:25 bingbotc
/etc/cron.daily/bingbot
3)我在调用脚本之前还添加了一行,以便创建一个带有运行日期的文件,以确保它不是我的脚本的问题( echo "Time: $(date). BINGREWARDS SCRIPT RAN." >> /home/user/bingbot.txt
)但是,第二天它没有创建,bingbot.txt
所以我知道它没有运行。
4)我从手动运行了我的脚本/etc/cron.daily/bingbot
,它运行完美,并创建了一个带有日期的文件。
5)我的脚本不需要 sudo 权限。
6)内容/etc/cron.daily/bingbot
:
#!/bin/sh
echo "Time: $(date). BINGREWARDS SCRIPT RAN." >> /home/toshiba/bingbot.txt
python /home/user/Desktop/BingRewards/mainpy
7)更新尝试手动运行 anacron sudo run-parts /etc/cron.daily
,成功运行了我的脚本。有趣的是...在日志中我得到了:
Nov 22 17:01:14 ubuntu16 anacron[15605]: Anacron 2.3 started on 2017-11-22
Nov 22 17:01:14 ubuntu16 anacron[15605]: Can't open timestamp file for job cron.daily: Permission denied
Nov 22 17:01:14 ubuntu16 anacron[15605]: Aborted
完成后我sudo run-parts /etc/cron.daily
再次运行,没有出现该错误;它说Nov 22 17:35:55 ubuntu16 anacron[16777]: Updated timestamp for job cron.daily' to 2017-11-22
可能是权限错误,它会开始工作。但是是什么导致了这个权限问题?
更新2Anacron 今天也运行脚本失败了。与上面的日志中相同的“权限被拒绝”错误。此外,行中的行/etc/crontab
以 root 身份执行 anacron,就像它应该的那样:
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
更新 3重启电脑后,问题消失了约 3 天,但随后又出现了。25 日,系统日志显示 cron.daily 已终止,这似乎是一种奇怪的行为。然而,26 日它似乎可以正常工作,因为它在系统日志中显示它已更新时间戳。27 日它完全无法运行。这太疯狂了。我不知道是什么原因造成的。
它无法运行我的脚本的原因是什么?
答案1
我在 EL6(不是 debian)上遇到了同样的问题,但原因可能相同。由于安全脚本,我对 /etc/cron.hourly/0anacron 的权限错误(错误=chmod 600)。我重新安装了 cronie-anacron,它恢复了执行位(即 chmod 755),并且开始工作。
请注意,/usr/bin/run-parts 会检查 /etc/cron.hourly 中的“部分”或文件是否可执行:
if [ -x $i ]; then
而不是它们是否可读...所以要注意这些文件的权限。还要注意 anacron 本身实际上是用完了 cron.hourly(即使您指定的作业是每日的)