jnbdz Asked: 2015-07-31 07:22:44 +0800 CST2015-07-31 07:22:44 +0800 CST 2015-07-31 07:22:44 +0800 CST 列出所有正在运行的 cron 作业 772 有没有办法在我的服务器上查看正在运行的 cron 作业列表? 我想查看正在加载的文件或命令的名称。加上它运行了多长时间。 我在 CentOS 上。 cron 4 个回答 Voted Best Answer user9517 2015-07-31T07:31:15+08:002015-07-31T07:31:15+08:00 cron 守护进程只是代表用户运行命令。您可以查看/var/log/cron已运行的命令,还可以查看所有常用位置(/var/spool/cron/、/etc/crontab、/etc/cron.d/、/etc/cron.*、 /etc/anacrontab &c ) 以获取 cron 运行的命令列表。 除此之外,每个进程的运行时间会有所不同并且很难追踪,您几乎可以肯定无法胜任这项工作。你真正想要达到什么目的? Aaron Copley 2015-07-31T08:52:59+08:002015-07-31T08:52:59+08:00 这又快又脏。我几乎觉得用这么多管道发布一些东西很尴尬,因为我确信有更有效的方法。但是,它可以完成工作,您可以从中学习并自己改进。 您可以解析 crond 的进程树以找到当前的子进程。 cronpid="$(pgrep -P 1 crond)" cronjobs="$(pstree -p $cronpid | sed 's/)/)\n/g' | grep -v crond | grep -wo '[0-9]*')" 解释: 该pgrep命令返回父 PID 为 1 的 crond 的 PID。 该pstree命令返回 crond 进程的进程树。 该sed命令将进程树输出拆分为多行。(出于下一个命令的目的。) 第一个grep是从输出中排除 crond 本身。 第二个grep是提取剩余进程的 PID。输出现在已减少为仅正在运行的 cron 作业。( $cronjobs) 现在,您可以对上面返回的 PID 进行循环,并对每个作业进行单独的查询,以确定它运行了多长时间以及命令是什么。 for job in ${cronjobs[@]}; do ps -p "$job" -o etime,cmd --no-headers done 示例输出: 01:06 /usr/bin/sleep 90 00:06 /usr/bin/sleep 90 user2997577 2015-07-31T08:31:21+08:002015-07-31T08:31:21+08:00 此外,crontab 具有 -u 选项来列出特定用户的 cron 作业。对于运行时间,如果作业有输出,它将通过电子邮件发送给用户,因此您可以获得预定开始时间和电子邮件到达之间的差异,以大致了解作业需要多长时间。cron 本身不跟踪运行时间。 对于当前正在运行的作业,如果不参考 cron 计划就很难获得,除非这些作业是从 /etc/cron.* 运行的。在这种情况下,可以使用 ps 来跟踪此类作业。 john 2022-03-10T14:22:08+08:002022-03-10T14:22:08+08:00 这对于文本处理也非常强大 printf "%s\n%s\n%s\n" "$OUTPUT1" "$OUTPUT2" "$OUTPUT3" | cat - /var/startup/forex/unhandled/num.txt >> temp && mv temp /var/startup/forex/unhandled/num.txt 在文本文件中逐行打印。你需要定义输出寿
cron 守护进程只是代表用户运行命令。您可以查看
/var/log/cron
已运行的命令,还可以查看所有常用位置(/var/spool/cron/、/etc/crontab、/etc/cron.d/、/etc/cron.*、 /etc/anacrontab &c ) 以获取 cron 运行的命令列表。除此之外,每个进程的运行时间会有所不同并且很难追踪,您几乎可以肯定无法胜任这项工作。你真正想要达到什么目的?
这又快又脏。我几乎觉得用这么多管道发布一些东西很尴尬,因为我确信有更有效的方法。但是,它可以完成工作,您可以从中学习并自己改进。
您可以解析 crond 的进程树以找到当前的子进程。
解释:
pgrep
命令返回父 PID 为 1 的 crond 的 PID。pstree
命令返回 crond 进程的进程树。sed
命令将进程树输出拆分为多行。(出于下一个命令的目的。)grep
是从输出中排除 crond 本身。grep
是提取剩余进程的 PID。输出现在已减少为仅正在运行的 cron 作业。($cronjobs
)现在,您可以对上面返回的 PID 进行循环,并对每个作业进行单独的查询,以确定它运行了多长时间以及命令是什么。
示例输出:
此外,crontab 具有 -u 选项来列出特定用户的 cron 作业。对于运行时间,如果作业有输出,它将通过电子邮件发送给用户,因此您可以获得预定开始时间和电子邮件到达之间的差异,以大致了解作业需要多长时间。cron 本身不跟踪运行时间。
对于当前正在运行的作业,如果不参考 cron 计划就很难获得,除非这些作业是从 /etc/cron.* 运行的。在这种情况下,可以使用 ps 来跟踪此类作业。
这对于文本处理也非常强大
printf "%s\n%s\n%s\n" "$OUTPUT1" "$OUTPUT2" "$OUTPUT3" | cat - /var/startup/forex/unhandled/num.txt >> temp && mv temp /var/startup/forex/unhandled/num.txt
在文本文件中逐行打印。你需要定义输出寿