为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

4 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

您可以从命令行(即bash)启动php脚本,方法是

nohup php myscript.php &

这个&将您的过程置于后台。

编辑:
是的,有一些缺点,但不可能控制?那是不对的。
简单kill processid会阻止它的。这仍然是最好和最简单的解决方案。


查看完整回答
反对 回复 2019-07-08
?
繁花如伊

TA贡献2012条经验 获得超12个赞

如果你能-拿一份UNIX环境下的高级编程..整个第13章专门讨论守护进程编程。示例在C中,但是所有您需要的函数都在PHP中有包装器(基本上是pcntlPOSIX)。

用几句话来说-编写一个守护进程(这只能在基于*nix的OS-es-Windows使用服务上才能实现)如下所示:

  1. 打电话

    umask(0)

    以防止权限问题。
  2. fork()

    让家长退出。
  3. 打电话

    setsid().

  4. 设置信号处理

    SIGHUP

    (通常这会被忽略或用于向守护进程发出信号以重新加载其配置)

    SIGTERM

    (让流程优雅地退出)。
  5. fork()

    然后让父级退出。
  6. 使用

    chdir().

  7. fclose() stdinstdout

    stderr

    别给他们写信。这样做的方法是将这些重定向到任何一种方法中的任何一种。

    /dev/null

    或者一个文件,但我无法找到在PHP中实现它的方法。当您启动守护进程使用shell重定向它们时,这是可能的(我不知道,您必须自己了解如何做到这一点:)。
  8. 做好你的工作!

另外,由于您使用的是PHP,所以要小心循环引用,因为PHP垃圾收集器在PHP 5.3之前无法收集这些引用,并且该进程将发生内存泄漏,直到最终崩溃。


查看完整回答
反对 回复 2019-07-08
  • 4 回答
  • 0 关注
  • 869 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信