我们使用 beanstalkd 来运行来自客户端的接收作业,使用 php 并使用 pheanstalk 作为 php 代理。 我们将一个worker作为PHP系统守护进程运行,并使用Monit继续监视。
但它以一天一次的频率不断重新启动。观察到问题后,确认没有代码端错误。那么机会有多大呢?
PHP 不是设计为长时间运行的进程,因此偶尔重新启动脚本可能是一件有用的事情 - 特别是如果干净退出在您的控制之下。
例如,可以在循环中运行 50/100/1000 个作业,然后退出脚本以使其自动重新启动。将脚本的调用包装在一个相当简单的 shell 脚本中可以检查返回值,然后立即重新启动,或者在出现问题时稍微减慢速度。
脚本突然失败的原因有很多种。内存泄漏可以强制操作系统终止进程,错误可能会引发未捕获的异常或其他此类致命错误,或者脚本外部的内容可能会导致失败。
队列后台工作线程的困难部分是处理可能阻止脚本一直工作的(潜在(问题。详细日志在尝试跟踪此类问题时有很大帮助。