Cron 作业存在于 /etc/cron.* 中,但没有任何用户的 cron 作业?

Cron 作业存在于 /etc/cron.* 中,但没有任何用户的 cron 作业?

我正在尝试解决托管网站和 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 运行的。

也可以看看如何获取我的机器上所有计划的 cron 作业的列表?

相关内容