是否有一个命令或现有的脚本可以让我一次查看*NIX系统的所有调度cron作业?我希望它包括所有用户crontab,以及/etc/crontab,以及/etc/cron.d.中的任何内容如果能在/etc/ crontable中看到run-parts运行的特定命令,那就太好了。

理想情况下,我希望输出以良好的列形式,并以某种有意义的方式排序。

然后,我可以合并来自多个服务器的这些清单,以查看总体的“事件时间表”。

我本来打算自己写一个这样的脚本,但如果有人已经费心了……


当前回答

对Kyle Burton的回答稍加改进,改进了输出格式:

#!/bin/bash
for user in $(cut -f1 -d: /etc/passwd)
do echo $user && crontab -u $user -l
echo " "
done

其他回答

这将显示所有用户的所有crontab条目。

sed 's/^\([^:]*\):.*$/crontab -u \1 -l 2>\&1/' /etc/passwd | sh | grep -v "no crontab for"

你必须以root用户运行,但是:

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

将遍历每个用户名,列出他们的crontab。crontab由各自的用户拥有,因此您将无法看到其他用户的crontab,除非是他们或root用户。


编辑 如果你想知道crontab属于哪个用户,使用echo $user

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

这取决于您的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可能更独立于系统。

我喜欢上面简单的一行字回答:

$(cut -f1 -d: /etc/passwd);执行crontab -u $user -l;完成

但是Solaris没有-u标志,也不会打印正在检查的用户,你可以这样修改:

for user in $(cut -f1 -d: /etc/passwd); do echo User:$user; crontab -l $user 2>&1 | grep -v crontab; done

当一个帐户不允许使用cron等时,您将得到一个用户列表,其中没有crontab抛出的错误。注意,在Solaris中,角色也可以在/etc/passwd中(参见/etc/user_attr)。

以@Kyle为基础

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

为了避免/etc/passwd顶部的注释,

在macosx上

for user in $(dscl . -list /users | cut -f1 -d:); do echo $user; crontab -u $user -l; done