Linux服务器后台运行程序操作指南(含Python与Shell脚本实战)
针对Linux服务器需长时间运行Python或Shell脚本的场景,本文详细拆解 nohup 一键提交单次任务与 tmux 建立隔离会话的完整流程。涵盖权限配置、日志重定向、进程监控与安全终止操作,帮助开发者脱离终端限制高效管理后台计算任务。
Linux服务器后台运行程序的适用场景
在服务器端执行模型推理、数据处理或自动化巡检时,终端连接中断会导致正在运行的脚本意外终止。通过后台守护机制,程序将脱离当前登录会话独立运行,即使关闭SSH客户端或断开网络,计算过程仍会持续进行。根据任务交互频率与管理需求,可分别采用 nohup 提交无交互单次任务,或使用 tmux 构建持久化窗口以进行多实验并行调试。
方法一:使用 nohup 提交单次耗时任务
第1步:赋予脚本可执行权限
目的:避免执行 .sh 脚本时触发 Permission denied 报错。
入口/动作:打开终端,导航至脚本所在目录,执行权限授权指令。
chmod +x 你的脚本名.sh
第2步:启动后台任务并重定向日志
目的:将标准输出与标准错误捕获至日志文件,释放当前终端占用。
入口/动作:在命令行前追加 nohup,末尾添加日志重定向符与后台符 &。
Python 脚本示例:
nohup python train_remote.py --model qwen2.5-vl --batch_size 4 > train_output.log 2>&1 &
Shell 脚本示例(两种等价写法任选):
# 写法 A(推荐,显式调用解释器)
nohup bash run_experiments.sh > exp_output.log 2>&1 &
# 写法 B(需提前完成第1步权限赋予)
nohup ./run_experiments.sh > exp_output.log 2>&1 &
第3步:查看运行进度与终止进程(附风险提醒)
目的:验证任务存活状态、追踪实时输出,或在必要时安全结束运行。
入口/动作:
1. 监控进度:tail -f train_output.log。实时刷新代码打印信息,按 Ctrl + C 仅退出监控画面,不会中断后台进程。
2. 终止任务:风险提醒:kill -9 为强制中断信号,可能导致未落盘的数据丢失或锁文件残留。确认无需保存中间状态后再执行。
# 查询目标进程号
ps -ef | grep run_experiments
# 示例查到 PID 为 12345 后执行强杀
kill -9 12345
方法二:使用 tmux 管理交互式开发与多任务
第1步:创建并进入独立会话环境
目的:在服务器内划分独立虚拟终端,隔离不同实验的输出流。
入口/动作:创建命名会话并自动切入。
tmux new -s track_eval
成功进入后,屏幕底部会出现绿色状态栏,表明已处于独立工作区。
第2步:在隔离窗口中直接运行代码
目的:利用新窗口的独立性执行常规命令,无需拼接守护参数。
入口/动作:直接在当前 tmux 窗口内输入常规运行指令。
python evaluate.py --dataset DRSet
bash run_experiments.sh
第3步:挂起进程、恢复界面与彻底销毁
目的:实现断线重连下的无缝进度回看,并在任务完成后清理资源。
入口/动作:
1. 挂起隐藏:按住 Ctrl + b 松开后,单独按下 d 键。会话将转入后台继续运行,此时可安全断开 SSH 或关机。
2. 恢复会话:次日连接服务器后,执行 tmux a -t track_eval。瞬间还原昨日终端状态,历史打印与报错均可直接阅读。
3. 销毁环境:当任务运行完毕且不再需要该会话时,在窗口内输入 exit 即可彻底关闭当前会话窗口。
方案对比与核心结论
nohup 语法简洁,适用于脚本逻辑固定、仅需静默产出最终结果的流水线任务;tmux 提供会话级隔离与交互式回看能力,更适合日常框架调试、超参网格搜索或多节点并发实验的环境管理。根据实际运维节奏选择对应工具,可显著降低因网络波动导致的任务中断率。
以上就是关于Linux服务器后台运行程序操作指南的详细内容,更多关于Python与Shell脚本在Linux环境下部署运维的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













