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

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

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

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


当前回答

从ROOT用户获取列表。

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

其他回答

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

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

这个脚本将Crontab输出到一个文件中,并列出所有确认没有Crontab条目的用户:

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

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

$(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)。

感谢这个非常有用的脚本。我在旧系统(Red Hat Enterprise 3,在字符串中处理不同的egrep和制表符)和其他没有/etc/cron.的系统上运行它时遇到了一些小问题D /(脚本以错误结束)。所以这里有一个补丁,使其在这种情况下工作:

2a3,4
> #See:  http://stackoverflow.com/questions/134906/how-do-i-list-all-cron-jobs-for-all-users
>
27c29,30
<         match=$(echo "${line}" | egrep -o 'run-parts (-{1,2}\S+ )*\S+')
---
>         #match=$(echo "${line}" | egrep -o 'run-parts (-{1,2}\S+ )*\S+')
>         match=$(echo "${line}" | egrep -o 'run-parts.*')
51c54,57
< cat "${CRONDIR}"/* | clean_cron_lines >>"${temp}"  # */ <not a comment>
---
> sys_cron_num=$(ls /etc/cron.d | wc -l | awk '{print $1}')
> if [ "$sys_cron_num" != 0 ]; then
>       cat "${CRONDIR}"/* | clean_cron_lines >>"${temp}"  # */ <not a comment>
> fi
67c73
<     sed "1i\mi\th\td\tm\tw\tuser\tcommand" |
---
>     sed "1i\mi${tab}h${tab}d${tab}m${tab}w${tab}user${tab}command" |

我不确定第一个egrep中的更改是否是一个好主意,但是,这个脚本已经在RHEL3、4、5和Debian5上进行了测试,没有任何问题。希望这能有所帮助!

我在下面做了一行脚本,它为我列出所有用户的所有cron作业。

cat /etc/passwd |awk -F ':' '{print $1}'|while read a;do crontab -l -u ${a} ; done