3

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

那么我该如何启动脚本,以便它继续在后台运行。

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

任何帮助将不胜感激

4

3 回答 3

4

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

set_time_limit(0); 

并将ignore_user_abort设置为"true"

ignore_user_abort(true);

然后您可以像往常一样从 Web 运行脚本,它将永远运行(直到进程被终止或脚本以通常的方式退出)。

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


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

于 2013-04-24T21:34:32.477 回答
2

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

$ sudo apt-get install screen

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

$ screen php myscript.php

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

$ screen -x

最好的部分是screen免费软件,并且在所有优秀发行版的存储库中(如果 Linux 不让你浮出水面,还有其他 *NIX)。

于 2013-04-24T21:46:57.287 回答
1

Cron Job 将是一种解决方案: 有关 Cron 作业的更多详细信息。

另一种方法是使用 Gearman 或本文中的其他任务管理器

于 2013-04-24T21:37:42.527 回答