猿问

将php脚本作为守护进程运行

将php脚本作为守护进程运行

我需要将php脚本作为守护进程运行(等待指令并执行操作)。Cron JOB不会为我做这件事,因为指令一到,就需要立即采取行动。我知道,由于内存管理问题,PHP并不是守护进程的最佳选择,但由于各种原因,在本例中我不得不使用PHP。我偶然发现了一个名为Daemon的工具http://libslack.org/daemon)它似乎帮助我管理守护进程,但在过去5年中没有任何更新,所以我想知道您是否知道其他适合我的情况的替代方案。任何信息都将不胜感激。



噜噜哒
浏览 870回答 4
4回答

回首忆惘然

您可以从命令行(即bash)启动php脚本,方法是nohup php myscript.php &这个&将您的过程置于后台。编辑:是的,有一些缺点,但不可能控制?那是不对的。简单kill processid会阻止它的。这仍然是最好和最简单的解决方案。

繁花如伊

如果你能-拿一份UNIX环境下的高级编程..整个第13章专门讨论守护进程编程。示例在C中,但是所有您需要的函数都在PHP中有包装器(基本上是pcntl和POSIX)。用几句话来说-编写一个守护进程(这只能在基于*nix的OS-es-Windows使用服务上才能实现)如下所示:打电话umask(0)以防止权限问题。fork()让家长退出。打电话setsid().设置信号处理SIGHUP(通常这会被忽略或用于向守护进程发出信号以重新加载其配置)SIGTERM(让流程优雅地退出)。fork()然后让父级退出。使用chdir().fclose() stdin, stdout和stderr别给他们写信。这样做的方法是将这些重定向到任何一种方法中的任何一种。/dev/null或者一个文件,但我无法找到在PHP中实现它的方法。当您启动守护进程使用shell重定向它们时,这是可能的(我不知道,您必须自己了解如何做到这一点:)。做好你的工作!另外,由于您使用的是PHP,所以要小心循环引用,因为PHP垃圾收集器在PHP 5.3之前无法收集这些引用,并且该进程将发生内存泄漏,直到最终崩溃。
随时随地看视频慕课网APP
我要回答