是否有一个命令或现有的脚本可以让我一次查看*NIX系统的所有调度cron作业?我希望它包括所有用户crontab,以及/etc/crontab,以及/etc/cron.d.中的任何内容如果能在/etc/ crontable中看到run-parts运行的特定命令,那就太好了。
理想情况下,我希望输出以良好的列形式,并以某种有意义的方式排序。
然后,我可以合并来自多个服务器的这些清单,以查看总体的“事件时间表”。
我本来打算自己写一个这样的脚本,但如果有人已经费心了……
是否有一个命令或现有的脚本可以让我一次查看*NIX系统的所有调度cron作业?我希望它包括所有用户crontab,以及/etc/crontab,以及/etc/cron.d.中的任何内容如果能在/etc/ crontable中看到run-parts运行的特定命令,那就太好了。
理想情况下,我希望输出以良好的列形式,并以某种有意义的方式排序。
然后,我可以合并来自多个服务器的这些清单,以查看总体的“事件时间表”。
我本来打算自己写一个这样的脚本,但如果有人已经费心了……
当前回答
在Ubuntu或debian下,你可以通过/var/spool/cron/crontabs/查看crontab,然后每个用户的文件都在那里。当然,这仅适用于特定于用户的crontab。
对于Redhat 6/7和Centos, crontab位于/var/spool/cron/下。
其他回答
这取决于您的cron版本。在FreeBSD上使用Vixie cron,我可以做这样的事情:
(cd /var/cron/tabs && grep -vH ^# *)
如果我想要更多的制表符分隔,我可能会这样做:
(cd /var/cron/tabs && grep -vH ^# * | sed "s/:/ /")
这是sed替换部分中的一个文字制表符。
在/etc/passwd中遍历用户并为每个用户执行crontab -l -u $user可能更独立于系统。
取决于你的linux版本,但我使用:
tail -n 1000 /var/spool/cron/*
作为根。非常简单,非常简短。
输出如下:
==> /var/spool/cron/root <==
15 2 * * * /bla
==> /var/spool/cron/my_user <==
*/10 1 * * * /path/to/script
这个脚本在CentOS中为我列出了环境中的所有cron:
sudo cat /etc/passwd | sed 's/^\([^:]*\):.*$/sudo crontab -u \1 -l 2>\&1/' | grep -v "no crontab for" | sh
我在下面做了一行脚本,它为我列出所有用户的所有cron作业。
cat /etc/passwd |awk -F ':' '{print $1}'|while read a;do crontab -l -u ${a} ; done
我认为一个更好的内衬是下面。例如,如果您在NIS或LDAP中有用户,他们不会在/etc/passwd中这将为您提供每个已登录用户的crontabs。
for I in `lastlog | grep -v Never | cut -f1 -d' '`; do echo $I ; crontab -l -u $I ; done