运行进程完成时发出警报

运行进程完成时发出警报

这里有一些关于进程完成/退出时收到警报的问题和答案(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.py

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

我习惯&&在第一个命令成功完成后执行第二个命令。这里有一些例子:

  1. 删除一个大文件夹并发出嘟嘟声:

    rm -rv ~/tmp && beep
    
  2. 编译内核并发送电子邮件:

    make && mail -s "Compilation is done" [email protected]
    

这是解决您的问题的好方法吗?在另一种情况下,您可以添加||第三个命令以防失败。

另外,shell 脚本可以接收退出状态( $?) 你的命令,并且使用if/else和 循环你可以做任何你想做的事情。

答案4

我制作了一个应用程序,当进程结束时,它会向您的 Android 手机发送通知,这样您就不必束缚在计算机上。

安装,然后添加;notifier.sh到命令末尾。

例如,如果您的命令是make install,您将发出以下命令:

make install; notifier.sh

https://notifier.sh

https://play.google.com/store/apps/details?id=sh.notifier

相关内容