这里有一些关于进程完成/退出时收到警报的问题和答案(1,2) - 但这些都假设用户自己发出了所述流程,因此可以使用管理脚本中内置的警报来编写脚本,或者将流程传递给某种警报。
我的情况是,我希望收到用户未初始化的进程完成/退出的提醒。也就是说,我正在 Ubuntu 12.04 LTS 服务器上批量处理大量视频文件。对这些文件的某些操作需要很长时间,因此我希望在特定操作完成时发出某种警报(电子邮件会很棒)。它们花费的时间太长,以至于基于 PIT 一次性手动执行此操作是完全没问题的。
为了提供更多信息 - 假设我正在处理一个特别大的文件,并且我看到它已经发展为 FFMPEG 脚本,该过程本身是一个 python 脚本(非常复杂,不是我自己编写的,而且有些东西)我不想修改——尽管这是第一个合乎逻辑的方法)。我想象发出一个命令或脚本,其中运行的 python 脚本的 PID 作为参数,当具有该 PID 的进程不再运行时,警报脚本会执行其操作。
有任何想法吗?
答案1
像这样的东西吗?
(while kill -0 $pid; do sleep 1; done) && echo "finished"
替换$pid
为进程 ID 以及echo "finished"
进程退出时您想要执行的任何操作。
例如:
(while kill -0 $pid; do sleep 1; done) && mail ...
答案2
process_watcher --pid 1234 --to [email protected]
目前,电子邮件正文如下所示:
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 [email protected] --to [email protected]
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 问题。
答案3
我习惯&&
在第一个命令成功完成后执行第二个命令。这里有一些例子:
删除一个大文件夹并发出嘟嘟声:
rm -rv ~/tmp && beep
编译内核并发送电子邮件:
make && mail -s "Compilation is done" [email protected]
这是解决您的问题的好方法吗?在另一种情况下,您可以添加||
第三个命令以防失败。
另外,shell 脚本可以接收退出状态( $?
) 你的命令,并且使用if/else
和 循环你可以做任何你想做的事情。
答案4
我制作了一个应用程序,当进程结束时,它会向您的 Android 手机发送通知,这样您就不必束缚在计算机上。
安装,然后添加;notifier.sh
到命令末尾。
例如,如果您的命令是make install
,您将发出以下命令:
make install; notifier.sh