PHP脚本可全天候运行

mkshixfv  于 2023-03-07  发布在  PHP
关注(0)|答案(5)|浏览(177)

是否有可能运行一个PHP脚本,使其24/7工作,并在崩溃或任何情况下将只是重新启动?它不应该在浏览器中打开,但不知何故服务器端像cron...它在Windows服务器上。

ozxc1zmp

ozxc1zmp1#

运行两个脚本--每个脚本都将检查第二个脚本是否处于活动状态:-)--并关闭php.ini中的时间限制

gajydyqb

gajydyqb2#

有一个脚本每n分钟运行一次。它应该做的第一件事是检查它是否已经运行。如果已经运行,新脚本退出。
检查完成后,做一些事情来标记脚本的存在。标准的做法是将pid写入指定的位置。然后检查函数可以:
1.验证pid文件是否存在。没有文件,没有正在运行的脚本。
1.验证文件中指示的pid是否正在运行。没有正在运行的pid,没有正在运行的脚本。
有一个小的机会,你会得到一个运行文件的误报。例如,你的脚本得到一个12345的pid。当它死了,系统已经循环了所有可能的pid。现在,另一个进程正在使用pid 12345。pid文件将包含'12345';您的脚本将验证具有该编号的进程是否正在运行,查看新进程是否在那里,并假设您的脚本正在运行。
最后一个问题可能有办法解决,但我不知道。

vs3odd8k

vs3odd8k3#

是的,这是可能的--但是标准的引用计数内存管理器不能科普复杂的对象链接。你可能需要重新编译以启用循环引用检查垃圾收集器。
一个更好的解决方案是运行一个快速完成的脚本--并且使用调度器频繁地运行它(但是要考虑如果一个示例在前一个示例完成之前启动,它将如何表现)。
或者,您可能希望在HTTP请求触发的随机基础上处理所需的处理-但要在HTTP请求的同步部分完成之后(阅读垃圾收集在会话管理中的工作原理)。
如果知道脚本的目的是什么,这将是很有帮助的。

qq24tv8q

qq24tv8q4#

每分钟运行一次脚本并检查最后一个脚本是否仍在运行。

$path = '/home/.../domains/..../public_html/.../lasttime.txt';
$myfile = fopen($path, "r");
$last_time = intval(fread($myfile,filesize($path)));
fclose($myfile);

if( (time()-$last_time)<30  ){
    die();
}

在脚本中更新此文件以防止运行另一个脚本

$myfile = fopen($path,"w");
fwrite($myfile,time()); 
fclose($myfile);
kwvwclae

kwvwclae5#

在Windows服务器上,您将不会创建cron作业,其等价物是可用于自动运行脚本的任务计划程序。
就像其他帖子已经说过的,创建一个运行时间短,但可以每小时调用一次的php脚本是最好的方法。如果你真的需要一个程序真正24/7运行,你需要一些方法来编译你的代码为二进制。最好的选择是C++或Java。

相关问题