是否有类似 forever.js 的 PHP 等效工具可以持续运行我的脚本?

14

我偶尔使用 forever.js 将CLI类型的Node.js应用程序快速而简单地部署到生产环境中,而无需完整的supervisord部署。

我想知道是否有PHP的等效工具?目前我们有一个队列处理系统,从SQS获取消息,并将它们同步处理到数据库中(在这种特定用例中,无法异步执行,因为会导致各种令人讨厌的行锁定问题)。目前它每分钟运行一次,但经常提前完成,我希望它能重新开始运行。我不能同时运行多个进程。

欢迎任何*nix命令/软件/bash类型的想法。


6
为什么不使用 forever.js 来启动你的 PHP 脚本? - quentinadam
糟糕!没有想到那个,我会试一下的。 - Jujhar Singh
2个回答

30

只需在您的 PHP 脚本中使用 forever(使用-c参数指示 forever 使用php):

$ cat test.php
<?php
sleep(3);
print("foobar\n");
exit;
?>
$ forever -c php test.php
foobar
error: Forever detected script was killed by signal: null
error: Forever restarting script for 1 time
foobar
error: Forever detected script was killed by signal: null
error: Forever restarting script for 2 time
...

哥们,我真没想到你能做到这个。这解决了我的问题。谢谢! - Jujhar Singh
2
真的吗?太棒了! - RedactedProfile
这真的太疯狂了!我应该在哪里为这个项目捐款?!! - Ma'moon Al-Akash
2
顺便提一下,原来 forever -c 并没有将脚本放在后台运行,我必须使用 screen 来实现,类似于 screen forever -c php myscript.php 并分离它以运行 "forever"! - Ma'moon Al-Akash
6
@Ma'moonAl-Akash 这个屏幕不是为此而设计的,应该使用 nohup。无论如何,要将脚本作为守护进程使用 forever,请使用 start 命令,例如:forever start -c php mysqcript.php。确保为 forever 实例和脚本的 STDOUT / STDERR 指定日志文件,例如:forever start -a -l /path/to/myscript_forever.log -o /path/to/myscript_out.log -e /path/to/myscript_err.log -c php myscript.php - Sergey Lukin
1
@SergeyLukin 谢谢,你说得完全正确,请不要点赞我的评论,Sergey的评论才是正确的答案,事实上我认为那是最好的回答。我不会删除我的评论,以便向其他人展示我犯错的地方! - Ma'moon Al-Akash

2

我刚刚发现了这个工具supervisord,它非常好用。我使用了这个ratchet教程让它在几分钟内运行起来!

如果我没记错,forever脚本在重新启动服务器时不会自动重启吧?


我们已经使用supervisord大约8个月了,它非常好用,实际上我们与foreverd一起使用。然而,由于几乎所有的东西都正在转移到docker上,我们发现自己实际上正在使用docker内置的守护进程工具,例如:-d --restart=always - Jujhar Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接