Cron
列出所有正在執行的 cron 作業
有沒有辦法在我的伺服器上查看正在執行的 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