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

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

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

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


当前回答

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

crontab -l username

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

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

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

其他回答

你必须以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

向yukondude表示歉意和感谢。

我已经试着总结了时间设置以便于阅读,尽管这不是一个完美的工作,而且我不会碰“每周五”或“只有周一”的东西。

这是版本10 -现在:

runs much much faster has optional progress characters so you could improve the speed further. uses a divider line to separate header and output. outputs in a compact format when all timing intervals uencountered can be summarised. Accepts Jan...Dec descriptors for months-of-the-year Accepts Mon...Sun descriptors for days-of-the-week tries to handle debian-style dummying-up of anacron when it is missing tries to deal with crontab lines which run a file after pre-testing executability using "[ -x ... ]" tries to deal with crontab lines which run a file after pre-testing executability using "command -v" allows the use of interval spans and lists. supports run-parts usage in user-specific /var/spool crontab files.

我现在在这里发布完整的脚本。

https://gist.github.com/myshkin-uk/d667116d3e2d689f23f18f6cd3c71107

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

#!/bin/bash
for user in $(cut -f1 -d: /etc/passwd)
do echo $user && crontab -u $user -l
echo " "
done
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。

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

我倾向于使用以下小命令列出基于Unix操作系统的所有用户的所有作业,并使用现代bash控制台:

1. 单用户

 echo "Jobs owned by $USER" && crontab -l -u $USER

2. 所有用户

for wellknownUser in $(cut -f1 -d: /etc/passwd);
   do
      echo "Jobs owned by $wellknownUser";
      crontab -l -u $wellknownUser;
      echo -e "\n";
      sleep 2;  # (optional sleep 2 seconds) while drinking a coffee
   done