Ubuntu下Scrapy后台运行问题:关闭SSH后进程终止原因咨询
问题原因及解决办法
原因
关闭SSH会话时,系统会向该会话关联的所有进程发送SIGHUP(挂起信号),默认情况下进程收到这个信号就会终止。即便用了nohup,仍可能因为以下情况导致进程终止:
- Scrapy启动的子进程没正确继承
nohup的会话隔离,依然会收到SIGHUP信号 - 未正确重定向输出流,若
nohup.out写入失败(比如权限不足),进程会主动退出 - 部分Shell在退出时,仍会向后台作业发送额外信号,触发进程终止
解决办法
使用终端复用工具(最可靠)
用screen或tmux创建独立的终端会话,爬虫在会话内运行,关闭SSH不会影响进程:# 创建名为spider的会话 screen -S spider # 在会话内启动爬虫 scrapy crawl myspider # 按Ctrl+A+D分离会话,之后可通过screen -r spider重新连接查看状态优化nohup命令
确保重定向所有输出流,避免因输出写入失败导致进程退出:nohup scrapy crawl myspider > myspider.log 2>&1 &其中
2>&1将错误输出合并到标准输出,一起写入指定日志文件,替代默认的nohup.out。脱离Shell作业控制
在nohup启动进程后,用disown将其从Shell作业列表中移除,避免Shell退出时发送信号:nohup scrapy crawl myspider > myspider.log 2>&1 & disown %1或者直接用
setsid启动进程,让它完全脱离当前SSH会话:setsid scrapy crawl myspider > myspider.log 2>&1 &
内容的提问来源于stack exchange,提问作者user2155362
相关产品推荐
相关产品推荐

