Cron

列出所有正在執行的 cron 作業

  • March 9, 2022

有沒有辦法在我的伺服器上查看正在執行的 cron 作業列表?

我想查看正在載入的文件或命令的名稱。加上它執行了多長時間。

我在 CentOS 上。

cron 守護程序只是代表使用者執行命令。您可以查看/var/log/cron已執行的命令,還可以查看所有常用位置(*/var/spool/cron/、/etc/crontab、/etc/cron.d/、/etc/cron.**、 /etc/anacrontab &c ) 以獲取 cron 執行的命令列表。

除此之外,每個程序的執行時間會有所不同並且很難追踪,您幾乎可以肯定無法勝任這項工作。你真正想要達到什麼目的?

這又快又髒。我幾乎覺得用這麼多管道發布一些東西很尷尬,因為我確信有更有效的方法。但是,它可以完成工作,您可以從中學習並自己改進。

您可以解析 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

引用自:https://serverfault.com/questions/709713