如何在完成一个过程后运行程序

如何在完成一个过程后运行程序

所以我有一个创建用户帐户备份的 backup.php 文件。使用 top -c | grep 用户名,我可以看到该过程正在进行,

top -c | grep newin 显示如下

11334 root      39  19  128m  38m 7036 S 10.3  0.1   0:00.57 pkgacct - newin - av: 4 - write compressed stream
11351 newin     39  19  130m  33m 2792 S  3.7  0.1   0:00.11 pkgacct - newin - av: 4 - create tar stream
11334 root      39  19  128m  38m 7036 S  9.3  0.1   0:00.85 pkgacct - newin - av: 4 - write compressed stream
11351 newin     39  19  130m  34m 2792 S  1.3  0.1   0:00.15 pkgacct - newin - av: 4 - create tar stream
11334 root      39  19  128m  38m 7036 S 10.6  0.1   0:01.17 pkgacct - newin - av: 4 - write compressed stream
11412 newin     39  19 83172  16m 3856 S  1.7  0.1   0:00.05  /usr/local/cpanel/bin/ftpput /bacupdrive

我希望备份过程完成后执行 mail.sh

您能提供一些帮助吗?

谢谢。

答案1

我没有在 Linux 上运行过 Web 服务器,所以我不知道php脚本运行时会启动哪些进程,但我想到了几点。

(1)检查程序是否正在运行的简单方法是使用pidof,如果未找到,它将返回错误,例如等到某个进程完成,请使用:

while pidof ProcessName; do sleep 1; done
mail.sh

(2)但是,如果脚本在一秒钟内结束并重新启动,您可能会错过终止,因此您需要一个更复杂的脚本:

if p="$(pidof ProcessName)"
then while [ "$(pidof ProcessName)" == "$p" ]; do sleep 1; done
fi
mail.sh

这将确保 PID 不会改变,就像在 的新版本中发生的那样ProcessName

显然,延迟的长度需要在响应终止的速度和过度频繁检查的开销之间取得平衡。

总体而言,更好的解决方案是,如果您的 Web 服务器具有内置功能,可以在php脚本完成时启动命令。

答案2

使用以下命令:

backup.php && mail.sh

&&布尔 AND 运算符。一旦backup.php完成且无错误,它将执行mail.sh。如果backup.php抛出错误,mail.sh则不会执行。

如果您不介意是否backup.php引发错误,请使用;(分号)代替&&

backup.php; mail.sh

在这种情况下,mail.sh将在 终止时执行backup.php

相关内容