SSH断连后如何保持Sentinel2影像下载Python脚本持续运行
结论
仅执行python3 main.py &将脚本置于后台启动无法满足关闭SSH后脚本持续运行的需求。
该命令仅会把Python进程放到当前SSH会话绑定的Shell后台执行,当SSH连接断开时,系统会向当前Shell关联的所有子进程发送SIGHUP挂断信号,默认配置下进程收到该信号会直接终止,你的批量下载任务会中途中断。
可用实现方案
你可以根据自己的使用习惯选以下任意一种方案:
- 轻量化方案:使用
nohup启动
直接执行命令:
命令说明:nohup python3 main.py > sentinel2_download.log 2>&1 &nohup的作用是让启动的进程忽略SIGHUP信号,和当前SSH会话解绑,断开连接也不会被终止> sentinel2_download.log是把脚本的正常输出写入指定日志文件,方便后续回溯下载进度2>&1是把脚本的报错信息也合并写入同一个日志文件,出问题可以直接查日志定位- 末尾的
&是让进程在后台运行,执行完命令会返回进程PID,你可以后续用ps aux | grep main.py检查进程运行状态,需要终止任务时执行kill 对应PID即可。
- 可随时回查实时输出方案:使用终端复用工具
如果你后续需要随时切回脚本运行界面看实时输出,优先用tmux:- SSH登录服务器后直接执行
tmux,会进入一个独立于SSH会话的虚拟终端 - 在这个虚拟终端里正常执行
python3 main.py启动下载脚本 - 需要断开SSH时,按快捷键
Ctrl+B后松开再按D,即可将当前tmux会话挂起后台运行,此时直接关闭SSH窗口不会影响脚本 - 下次重新SSH连接服务器后,执行
tmux attach就能直接回到之前的运行界面,看到脚本的实时输出。
如果服务器没有预装tmux,Debian/Ubuntu系统执行apt install tmux、CentOS/RHEL系统执行yum install tmux即可完成安装。
- SSH登录服务器后直接执行
- 长期托管方案:配置systemd服务
如果你不仅需要关SSH不中断任务,还希望服务器重启后脚本可以自动启动继续下载,可以写一个简单的systemd服务配置托管脚本,临时跑批量下载任务的话前两种方案完全够用。
注意:Sentinel2单景影像体积较大,建议提前确认脚本本身支持断点续传、下载进度记录逻辑,避免遇到网络波动、服务器意外重启等情况时需要从头重新下载。
内容的提问来源于stack exchange,提问作者Lorenzo Epifani
相关产品推荐
相关产品推荐

