想让 PHP cli 执行一个较长的任务, xshell 一关闭, nohup 也跟着退出了,怎么回事?

2017-03-16 14:20:28 +08:00
 alwayshere

目前用 php cli 模式爬取一个网站内容,因为要执行很久,在 xshell 中输入:

nohup php scrape.php &

回车后, php 继续执行,但是一关闭 xshell ,这个进程也就跟着结束了, nohup 这么脆弱吗? Linux 小白不太懂,求好心 V2 们解答一下,或者有没有更好的让 php 常驻进程的命令?

5490 次点击
所在节点    程序员
27 条回复
alwayshere
2017-03-16 17:01:18 +08:00
@HowToMakeLove 我是这样做的,连按两次回车,直接右上角关闭 xshell ,然后那个 php 进程也立即终止了
chenqh
2017-03-16 17:09:50 +08:00
screen?
minbaby
2017-03-16 17:43:59 +08:00
这种需求有这么几种做法
1. tmux/screen/byobu(简单)这些工具,可以吧你正在用的会话一直保持下去
2. 使用 supervisor 这类守护进程工具,可以帮助你自己启动,或者重新启动程序(推荐)
3. 自己实现 daemon 功能(参考 https://github.com/minbaby/http-server-learning/blob/master/sample/how_to_make_daemon/daemon.php)
Jaylee
2017-03-16 18:05:32 +08:00
@minbaby 两次 fork
minbaby
2017-03-16 19:13:17 +08:00
@Jaylee 翻了一下 unix 环境编程的 守护进程那一章,确实是进行了两次 fork ,不过中间有提到, System V 系统有人建议进行两次 fork ,以防止其获取终端控制。不过这似乎并不是必须的吧?
IgniteWhite
2017-03-16 19:26:46 +08:00
screen
eoo
2017-03-16 23:44:20 +08:00
pm2

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/347914

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX