Bash

執行過程完成時發出警報

  • February 14, 2019

這裡有一些關於在程序完成/退出時收到警報的問題和答案(1、2 ——但這些都假設使用者自己發布了所述程序,因此可以使用內置的警報編寫腳本管理腳本,或通過管道將過程傳遞給某種警報。

我的情況是,我希望在我的使用者未初始化的程序完成/退出時收到警報。即,我在 Ubuntu 12.04 LTS 伺服器上批量處理大量影片文件。對這些文件的某些操作需要很長時間,所以我希望在特定文件完成時發出某種警報(電子郵件會很棒)。他們需要很長時間,以至於基於 PIT 一次性手動執行此操作會非常好。

為了提供更多資訊——假設我正在處理一個特別大的文件,我看到它已經發展為一個 FFMPEG 腳本,這個過程本身就是一個 python 腳本(這很複雜,不是我自己寫的,等等我不想修改——儘管那將是第一個合乎邏輯的方法)。我想用所說的執行 python 腳本的 PID 作為參數發出命令或腳本,當具有該 PID 的程序不再執行時,警報腳本會執行它的操作。

有任何想法嗎?

我寫了process_watcher.py

process_watcher --pid 1234 --to me@gmail.com

目前,電子郵件正文如下所示:

PID 18851:/usr/lib/libreoffice/program/soffice.bin –writer –splash-pipe=5

開始:3 月 10 日星期四 18:33:37 結束:3 月 10 日星期四 18:34:26(持續時間 0 :00:49)

記憶體(目前/峰值)- 常駐:155,280 / 155,304 kB 虛擬:1,166,968 / 1,188,216 kB

[+] indicates the argument may be specified multiple times, for example:
process-watcher -p 1234 -p 4258 -c myapp -c "exec\d+" --to person1@domain.com --to person2@someplace.com

optional arguments:
 -h, --help            show this help message and exit
 -p PID, --pid PID     process ID(s) to watch [+]
 -c COMMAND_PATTERN, --command COMMAND_PATTERN
                       watch all processes matching the command name. (RegEx pattern) [+]
 -w, --watch-new       watch for new processes that match --command. (run forever)
 --to EMAIL_ADDRESS    email address to send to [+]
 -n, --notify          send DBUS Desktop notification
 -i SECONDS, --interval SECONDS
                       how often to check on processes. (default: 15.0 seconds)
 -q, --quiet           don't print anything to stdout

如果您需要任何改進,請送出 GitHub 問題。

像這樣的東西?

(while kill -0 $pid; do sleep 1; done) && echo "finished"

替換$pid為程序 ID 以及echo "finished"程序退出時您想要執行的任何操作。

例如:

(while kill -0 $pid; do sleep 1; done) && mail ...

引用自:https://unix.stackexchange.com/questions/153544