是否有可能运行一个PHP脚本,使其24/7工作,并在崩溃或任何情况下将只是重新启动?它不应该在浏览器中打开,但不知何故服务器端像cron...它在Windows服务器上。
ozxc1zmp1#
运行两个脚本--每个脚本都将检查第二个脚本是否处于活动状态:-)--并关闭php.ini中的时间限制
gajydyqb2#
有一个脚本每n分钟运行一次。它应该做的第一件事是检查它是否已经运行。如果已经运行,新脚本退出。检查完成后,做一些事情来标记脚本的存在。标准的做法是将pid写入指定的位置。然后检查函数可以:1.验证pid文件是否存在。没有文件,没有正在运行的脚本。1.验证文件中指示的pid是否正在运行。没有正在运行的pid,没有正在运行的脚本。有一个小的机会,你会得到一个运行文件的误报。例如,你的脚本得到一个12345的pid。当它死了,系统已经循环了所有可能的pid。现在,另一个进程正在使用pid 12345。pid文件将包含'12345';您的脚本将验证具有该编号的进程是否正在运行,查看新进程是否在那里,并假设您的脚本正在运行。最后一个问题可能有办法解决,但我不知道。
n
pid
vs3odd8k3#
是的,这是可能的--但是标准的引用计数内存管理器不能科普复杂的对象链接。你可能需要重新编译以启用循环引用检查垃圾收集器。一个更好的解决方案是运行一个快速完成的脚本--并且使用调度器频繁地运行它(但是要考虑如果一个示例在前一个示例完成之前启动,它将如何表现)。或者,您可能希望在HTTP请求触发的随机基础上处理所需的处理-但要在HTTP请求的同步部分完成之后(阅读垃圾收集在会话管理中的工作原理)。如果知道脚本的目的是什么,这将是很有帮助的。
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);
kwvwclae5#
在Windows服务器上,您将不会创建cron作业,其等价物是可用于自动运行脚本的任务计划程序。就像其他帖子已经说过的,创建一个运行时间短,但可以每小时调用一次的php脚本是最好的方法。如果你真的需要一个程序真正24/7运行,你需要一些方法来编译你的代码为二进制。最好的选择是C++或Java。
5条答案
按热度按时间ozxc1zmp1#
运行两个脚本--每个脚本都将检查第二个脚本是否处于活动状态:-)--并关闭php.ini中的时间限制
gajydyqb2#
有一个脚本每
n
分钟运行一次。它应该做的第一件事是检查它是否已经运行。如果已经运行,新脚本退出。检查完成后,做一些事情来标记脚本的存在。标准的做法是将
pid
写入指定的位置。然后检查函数可以:1.验证
pid
文件是否存在。没有文件,没有正在运行的脚本。1.验证文件中指示的
pid
是否正在运行。没有正在运行的pid
,没有正在运行的脚本。有一个小的机会,你会得到一个运行文件的误报。例如,你的脚本得到一个12345的
pid
。当它死了,系统已经循环了所有可能的pid
。现在,另一个进程正在使用pid
12345。pid文件将包含'12345';您的脚本将验证具有该编号的进程是否正在运行,查看新进程是否在那里,并假设您的脚本正在运行。最后一个问题可能有办法解决,但我不知道。
vs3odd8k3#
是的,这是可能的--但是标准的引用计数内存管理器不能科普复杂的对象链接。你可能需要重新编译以启用循环引用检查垃圾收集器。
一个更好的解决方案是运行一个快速完成的脚本--并且使用调度器频繁地运行它(但是要考虑如果一个示例在前一个示例完成之前启动,它将如何表现)。
或者,您可能希望在HTTP请求触发的随机基础上处理所需的处理-但要在HTTP请求的同步部分完成之后(阅读垃圾收集在会话管理中的工作原理)。
如果知道脚本的目的是什么,这将是很有帮助的。
qq24tv8q4#
每分钟运行一次脚本并检查最后一个脚本是否仍在运行。
在脚本中更新此文件以防止运行另一个脚本
kwvwclae5#
在Windows服务器上,您将不会创建cron作业,其等价物是可用于自动运行脚本的任务计划程序。
就像其他帖子已经说过的,创建一个运行时间短,但可以每小时调用一次的php脚本是最好的方法。如果你真的需要一个程序真正24/7运行,你需要一些方法来编译你的代码为二进制。最好的选择是C++或Java。