所以我有一个创建用户帐户备份的 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
。