是否有一个命令或现有的脚本可以让我一次查看*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/下。

其他回答

for user in $(cut -f1 -d: /etc/passwd); 
do 
    echo $user; crontab -u $user -l; 
done

在Solaris上,对于特定的已知用户名:

crontab -l username

要在Solaris上一次性获得所有用户的作业,就像上面的其他文章一样:

for user in $(cut -f1 -d: /etc/passwd); do crontab -l $user 2>/dev/null; done

更新: 请停止建议Solaris上的错误编辑:

getent passwd | cut -d: -f1 | perl -e'while(<>){chomp;$l = `crontab -u $_ -l 2>/dev/null`;print "$_\n$l\n" if $l}'

这避免了直接与passwd混淆,跳过没有cron条目的用户,对于那些有cron条目的用户,它会打印出用户名以及crontab。

主要是把这个放在这里,虽然这样我可以找到它,以防我需要再次搜索它。

我认为一个更好的内衬是下面。例如,如果您在NIS或LDAP中有用户,他们不会在/etc/passwd中这将为您提供每个已登录用户的crontabs。

for I in `lastlog | grep -v Never | cut -f1 -d' '`; do echo $I ; crontab -l -u $I ; done

如果您使用NIS检查集群,查看用户是否有crontab条目的唯一方法是根据Matt的回答/var/spool/ crontab .

grep -v "#" -R  /var/spool/cron/tabs