我有一个脚本,其中回声一些内容,并关闭连接到客户端,但它将后台工作,以处理一些电子邮件。
是否有可能跟踪后台进程的状态?我的意思是它已经完成了,或者还在运行等等。
当前,我正在DB上设置进程启动和进程结束的标志。但我担心有时脚本可能会在某些情况下失败。
交货。从服务器主机强制终止。
也有任何可能的方法来触发一个函数时,脚本停止执行(通过退出,强制停止等…)
我在windows/linux服务器上运行脚本,两者都是共享主机,没有CRON,任务调度程序支持。
谢谢。
在linux服务器中,您可以通过以下代码检查脚本状态
$output = array();
exec("ps aux | grep -i YOUR_SCRIPT | grep -v grep", $output);
if (empty($output)) {
// your script is not running
doSomething();
}
我没有测试windows部分,所以它可能有一点bug。但我认为概念是相似的。
$name = 'YOUR_SCRIPT';
if (!isRunning($name)) {
// script is not running
doSomething();
}
function isRunning($scriptname)
{
$output = array();
if (strtoupper(substr(php_uname(), 0, 3)) === 'WIN') {
// Windows os
exec("tasklist | find '"{$scriptname}'"", $output);
} else {
// Not window os, maybe linux, freebsd..etc
exec("ps aux | grep -i $scriptname | grep -v grep", $output);
}
return !empty($output);
}
我不完全确定我在这里是否得到了正确的结束,但我已经假设你想记录你的后台进程的活动,而不是实际连接到它。
如果是这样,也许最简单的方法是让进程创建一个txt日志文件,您可以在需要时访问该文件以查看发生了什么。只需根据需要使用fwrite()来附加文件。
您也可以使用mysql数据库表来达到同样的目的,它具有更易于阅读的优点。
如果你需要主动警告,如果没有(或特殊的)发生,你可以使用你的头文件或连接函数来检查你每次用户加载一个页面。如果你有足够的点击量,你会收到一封电子邮件pdq。
你确定你没有头发吗?检查cpanel -它可能隐藏在那里。
以上答案是正确的。之后如果你想停止进程你可以通过
来杀死进程kill -9 PID
您将在输出数组中获得PID。在if语句中使用它。
$output = array();
exec("ps aux | grep -i YOUR_SCRIPT | grep -v grep", $output);
if (empty($output)) {
$kill = " kill -9 ".$output['PID'] // Print the output array to get exact index for PID
exec($kill);
}