是否有命令或现有脚本可以让我查看所有* NIX系统's scheduled cron jobs at once? I' d,它包括所有用户crontabs,以及 /etc/crontab
,以及 /etc/cron.d
中的任何内容 . 在 /etc/crontab
中查看由 run-parts
运行的特定命令也会很高兴 .
理想情况下,我希望输出采用漂亮的列形式,并以一些有意义的方式进行排序 .
然后,我可以合并来自多个服务器的这些列表,以查看整个“事件安排” .
我本来就要写这样一个剧本,但如果有人已经麻烦了......
22 回答
以下删除了没有crontab的用户的注释,空行和错误 . 您剩下的就是清晰的用户及其工作清单 .
注意在第二行使用
sudo
. 如果您已经是root用户,请将其删除 .输出示例:
我在Ubuntu(12到16)和Red Hat(5到7)上使用它 .
你必须以root身份运行它,但是:
将循环遍历其crontab的每个用户名 . crontabs由各自的用户拥有,因此您将无法看到另一个用户的crontab,而不是他们或root用户 .
Edit 如果您想知道crontab属于哪个用户,请使用
echo $user
我最后写了一个脚本(我为什么你不是一个简单的事情,但它完成了我需要的大部分工作 . 它使用Kyle 's suggestion for looking up individual users' crontabs,但也处理
/etc/crontab
(包括run-parts
在/etc/cron.hourly
中发布的脚本) ,/etc/cron.daily
等)和/etc/cron.d
目录中的作业 . 它将所有这些作业并将它们合并到一个显示内容中,如下所示:请注意,它按小时和分钟显示用户和或多或少的排序,以便我可以看到每日计划 .
到目前为止,我已经在Ubuntu,Debian和Red Hat AS上进行了测试 .
在Ubuntu或debian下,您可以通过
/var/spool/cron/crontabs/
查看crontab,然后每个用户的文件都在那里 . 那个's only for user-specific crontab'当然 .这将显示所有用户的所有crontab条目 .
取决于你的Linux版本,但我使用:
作为根 . 非常简单而且很短 .
给我输出像:
Kyle Burton对改进输出格式的一个小改进:
这样可以避免直接搞乱passwd,跳过没有cron条目的用户,对于那些拥有cron条目的用户,它会打印出用户名以及crontab .
大部分都放在这里虽然所以我以后可以找到它以防万一我需要再次搜索它 .
如果使用NIS检查集群,则根据Matt的答案/ var / spool / cron / tabs查看用户是否具有crontab条目的唯一方法 .
我喜欢上面简单的单行答案:
但是Solaris没有-u标志并且不打印它正在检查的用户,你可以像这样修改它:
当不允许帐户使用cron等时,您将获得没有crontab抛出的错误的用户列表 . 请注意,在Solaris中,角色也可以在/ etc / passwd中(请参阅/ etc / user_attr) .
这个脚本在CentOS中为我工作,列出了环境中的所有crons:
取决于您的cron版本 . 在FreeBSD上使用Vixie cron,我可以这样做:
如果我想要更多的标签消除,我可能会做这样的事情:
这是sed替换部分中的文字标签 .
在
/etc/passwd
中循环访问用户可能更加系统独立,并为每个用户执行crontab -l -u $user
.感谢这个非常有用的脚本 . 我在旧系统上运行它有一些小问题(Red Hat Enterprise 3,它处理不同的egrep和字符串中的选项卡),以及/etc/cron.d/中没有任何内容的其他系统(脚本随后以错误结束) . 所以这是一个补丁,使它在这种情况下工作:
我不太确定第一个egrep的变化是个好主意,但是,这个脚本已经在RHEL3,4,5和Debian5上进行了测试,没有任何问题 . 希望这可以帮助!
Build 在@Kyle之上
通常在/ etc / passwd顶部避免注释,
在macosx上
我认为更好的一个班轮将在下面 . 例如,如果您有NIS或LDAP中的用户,则他们不会在/ etc / passwd中 . 这将为您提供已登录的每个用户的crontabs .
你可以为所有用户列表写:
你也可以去
此文件将列出计划
从ROOT用户获取列表 .
由于这是循环文件(
/etc/passwd
)并执行操作的问题,我在How can I read a file (data stream, variable) line-by-line (and/or field-by-field)?上错过了正确的方法:这使用
:
作为字段分隔符逐行读取/etc/passwd
. 通过说read -r user _
,我们让$user
持有第一个字段和_
其余的(它只是一个忽略字段的垃圾变量) .这样,我们就可以使用变量
$user
来调用crontab -u
,我们引用它是为了安全(如果它包含空格怎么办?在这样的文件中不太可能,但你永远不会知道) .在Solaris上,对于特定的已知用户名:
所有其他* Nix将需要
-u
修饰符:要在Solaris上同时获取所有用户的作业,就像上面的其他帖子一样:
对我来说,看看/ var / spool / cron / crontabs是最好的方法
此脚本将Crontab输出到文件,并列出确认没有crontab条目的所有用户: