don*_*gle 25 bash process top htop
这里有一些关于在进程完成/退出时收到警报的问题和答案 ( 1 , 2 ) - 但这些都假设用户自己发出了所述进程,因此可以使用内置于管理脚本,或通过管道将进程传递给某种警报。
我的情况是,我希望收到用户未初始化的进程完成/退出的警报。也就是说,我在 Ubuntu 12.04 LTS 服务器上批量处理大量视频文件。对这些文件的某些操作需要很长时间,所以当特定的一个完成时,我想要某种警报(电子邮件会很棒)。他们花费的时间太长了,基于 PIT 一次性地、手动地执行此操作是完全没问题的。
为了提供更多信息——假设我正在处理一个特别大的文件,我看到它已经发展到一个 FFMPEG 脚本,这个过程本身就是一个 python 脚本(这非常复杂,不是我自己写的,还有一些东西)我不想修改——尽管这将是第一个合乎逻辑的方法)。我想象发出一个命令或脚本,并以所述正在运行的 python 脚本的 PID 作为参数,当具有该 PID 的进程不再运行时,警报脚本会做它的事情。
有任何想法吗?
cha*_*aos 28
像这样的东西?
(while kill -0 $pid; do sleep 1; done) && echo "finished"
Run Code Online (Sandbox Code Playgroud)
替换$pid为进程 ID 以及echo "finished"进程退出时您想执行的任何操作。
例如:
(while kill -0 $pid; do sleep 1; done) && mail ...
Run Code Online (Sandbox Code Playgroud)
小智 10
process_watcher --pid 1234 --to me@gmail.com
Run Code Online (Sandbox Code Playgroud)
目前,电子邮件正文如下所示:
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
Run Code Online (Sandbox Code Playgroud)
如果您需要对其进行任何改进,请创建一个 GitHub 问题。
&&当第一个命令成功完成时,我用来执行第二个命令。这里有一些例子:
删除一个大文件夹并发出哔哔声:
rm -rv ~/tmp && beep
Run Code Online (Sandbox Code Playgroud)编译内核并发送电子邮件:
make && mail -s "Compilation is done" user@yourmaildomain.com
Run Code Online (Sandbox Code Playgroud)这是解决您问题的好方法吗?在另一种情况下,您可以添加一个||和第三个命令以防万一。
此外,shell 脚本可以接收您的命令的退出状态( $?),并且使用if/else和 循环您可以做任何您想做的事情。
小智 5
如果您没有 pid,这将一直运行,直到 ffmpeg 的所有实例都完成:
(while pidof ffmpeg | grep -q "[0-9]?"; do sleep 1; done) && echo "finished"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22794 次 |
| 最近记录: |