【问题标题】:keep a php script running all the time保持 php 脚本一直运行
【发布时间】:2013-04-24 21:30:05
【问题描述】:

我需要在我的服务器上保持一个 php 脚本运行和存活,该脚本运行并检查数据库的记录,如果需要则进行处理,休眠 3 分钟,然后以无限循环的形式循环到脚本的顶部。问题是启动它,如果我使用 php script.php 通过终端(它在 ubuntu 系统上运行)启动它,那么如果终端会话结束,脚本将停止运行。

那么我怎样才能启动脚本以使其保持在后台运行。

此外,如果我设置了一个每小时运行一次的 cron 作业并触发另一个脚本来检查主脚本是否仍在运行,如果没有重新启动它,我将如何获取此检查器脚本来检查初始脚本仍在运行(即使它处于睡眠状态)。

任何帮助将不胜感激

【问题讨论】:

  • supervisord 可以为您执行此操作,但仅作为守护进程运行也可以,创建带有 LSB 样式标头的 init.d 脚本,可能让它被 monit 而不是某些人监视自定义脚本。
  • 您可能会发现我的答案最简单。 :P

标签: php ubuntu


【解决方案1】:

如果从 Web 启动脚本是一个选项,则将 time limit 设置为“无限制”(在脚本本身中):

set_time_limit(0); 

ignore_user_abort设置为"true"

ignore_user_abort(true);

然后你可以像往常一样从网络上运行脚本,它将永远运行(直到进程被杀死或脚本exits以通常的方式)。

当然,您可以(并且必须)通过密码保护这样的启动脚本,例如通过.htaccess 使用 HTTP 身份验证,这样某人就无法启动许多永久运行的脚本,这会导致您的服务器瘫痪。


在检查另一个进程是否正在运行时,请参阅question1question2,或尝试在 StackOverflow 上搜索“[php] 检查进程是否正在运行”。另见http://php.net/manual/en/refs.fileprocess.process.php

【讨论】:

  • 感谢您的回答,就像做梦一样。你的救命稻草。
【解决方案2】:

如果您想从终端运行它并使其永久运行,请查看GNU screen。它是一个虚拟终端,即使您关闭终端,它也会在后台继续运行。

$ sudo apt-get install screen

有了这个,你可以简单地做到:

$ screen php myscript.php

脚本将加载到您可以断开连接的screen 会话中,即使您关闭终端,它也会继续运行。要检查它,只需调用:

$ screen -x

最好的部分是screen 是免费软件,并且在所有优秀发行版的存储库中(以及其他 *NIX 的,如果 Linux 不适合你的话)。

【讨论】:

  • 为什么不直接用nohup php myscript.php &-nohup断开后继续运行,&后台运行命令释放终端控制...
  • nohup 可以做到这一点,但screen 的优势是可以重新连接。 nohup 进程如果也挂起,则必须通过 pkill 杀死,而 screen 可以通过 screen 本身杀死。
  • 如果想法是一直运行该进程,那么杀死它的方法肯定是无关紧要的,并且通过屏幕访问脚本与跟踪可以限制的日志文件没有什么不同如果需要,可以达到最大尺寸
  • 感谢您的回复,知道它非常有用并且是解决问题的方法,但是我确实希望将其包含在 PHP 中。
  • exec('screen php myscript.php');:P
【解决方案3】:

Cron Job 是一种解决方案: More details about Cron job.

另一种方法是使用 Gearman 或其他一些任务管理器,例如 post

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 2011-12-06
    • 1970-01-01
    • 2021-09-16
    • 2023-03-07
    • 2020-07-04
    • 2012-01-27
    相关资源
    最近更新 更多