一、痛点场景
远程SSH连接服务器,运行程序、解压大文件、执行脚本,一旦关闭Xshell终端,任务直接中断。原因:前端终端关闭,会发送SIGHUP信号,终止所有关联前台进程。
本文三种方案,全覆盖后台离线运行需求。
二、方案1:& 符号——简单后台运行(缺陷:关闭终端依旧中断)
1. 使用方式
python test.py2. 优缺点
优点:用法最简单;缺点:只是放入后台,关闭终端进程依旧被杀,仅适合短时间后台任务。
三、方案2:nohup + & ——生产最常用,永久后台运行
1. 原理
nohup 屏蔽终端关闭的挂断信号,搭配&放入后台,关闭SSH终端,程序依旧持续运行,自动输出日志到nohup.out。
2. 标准生产命令(直接复制)
# 标准写法,日志输出到指定文件 nohup python test.py > run.log 2>&1 & # 忽略日志输出 nohup python test.py > /dev/null 2>&1 &3. 查看后台任务
jobs # 查看当前终端后台任务 ps aux # 全局查看进程4. 前台/后台切换
fg 任务编号 # 后台切前台 bg 任务编号 # 前台切后台四、方案3:screen——窗口离线托管,可随时重连查看日志(长任务首选)
1. 适用场景
需要随时查看程序实时输出、长时间运维任务、需要反复进入终端查看运行状态,首选screen。
2. 安装
yum install screen -y3. 全套实操命令
# 1. 创建新会话 screen -S app-run # 2. 在窗口内执行任务,直接关闭终端也不会中断 python test.py # 3. 退出会话(保留进程后台运行):Ctrl+A 松开后按 D # 4. 重新连接会话 screen -r app-run # 5. 查看所有会话 screen -ls # 6. 彻底关闭会话 exit五、三种方式选型建议
临时后台、不关闭终端:
业务程序常驻后台、无需看实时日志:nohup(生产90%场景)
长时间任务、需要随时看输出:screen