我正在尝试解决托管网站和 wiki 的 CentOS 7 VM 上的 cron 故障。网上有很多关于排除 cron 故障的资料,但我无法理解我所看到的内容(并且还没有找到解释)。
我们有 cron 作业设置:
# ls -Al /etc/cron.daily/
total 24
-rwxr-x--- 1 root root 332 Nov 4 20:53 yum-daily.cron
-rwxr-x--- 1 root root 1206 Apr 12 2018 gdrive-backup
-rwx------ 1 root root 219 Oct 30 15:12 logrotate
-rwxr-x--- 1 root root 618 Oct 30 10:55 man-db.cron
-rwx------ 1 root root 208 Apr 10 2018 mlocate
但 cron 不显示任何作业:
[root@ftpit ~]# whoami
root
[root@ftpit ~]# crontab -l
no crontab for root
和:
[root@ftpit ~]# for user in $(cut -f1 -d: /etc/passwd); do crontab -l $user 2>/dev/null; done
[root@ftpit ~]#
cut -f1 -d: /etc/passwd
返回用户列表(见下文)。
为什么 cron 声称没有工作?
# cut -f1 -d: /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
dbus
saslauth
mailnull
smmsp
rpc
sshd
nscd
named
apache
tcpdump
mysql
postfix
<user XXXX>
<user yyyy>
tss
systemd-bus-proxy
systemd-network
ntp
答案1
该crontab
命令仅操作 中的线轴/var/spool/cron
,不/etc/cron.daily
考虑等中定义的作业。
没有列出所有 cron 作业的好方法;以下将给出一些想法:
head -n -0 /var/spool/cron/* /etc/crontab /etc/cron.d/*
ls /etc/cron.{hourly,daily,weekly,monthly}/
(显示所有 crontab 可能会包含与已删除用户对应的文件的误报。)
使用 systemd,您可能还想列出计时器:
systemctl list-timers
调试 cron 作业时,值得记住的是,在许多系统上,每日、每周和每月的作业是由 anacron 而不是 cron 运行的。