在日常工作中,很多人需要在终端窗口长时间运行程序,比如处理日志分析、后台服务、数据同步或自动化脚本。直接在本地终端执行命令,一旦网络中断或电脑休眠,任务就会中断,前功尽弃。
使用 nohup 让程序后台持续运行
nohup 是一个简单有效的工具,可以让命令忽略挂起信号,在你退出终端后依然继续运行。
nohup python long_task.py &
执行后,程序会转入后台,并自动生成一个名为 nohup.out 的日志文件,记录输出内容。你可以随时查看这个文件了解程序状态。
搭配 & 和重定向输出更灵活
如果不想让输出堆积在默认文件里,可以手动指定日志路径:
nohup python long_task.py > task.log 2>&1 &
这里的 2>&1 表示将错误输出也重定向到标准输出,确保所有信息都写入 task.log,方便后续排查问题。
screen:真正的会话守护者
nohup 虽然好用,但无法重新连接正在运行的程序界面。这时候 screen 就派上用场了。它能创建一个独立的虚拟终端会话,断开后再连也能恢复。
启动一个新会话:
screen -S myjob
接着在其中运行你的程序,比如:
python data_processor.py
按 Ctrl+A 然后松手再按 D,就能 detach(分离)会话,程序继续在后台跑。
想重新连接?输入:
screen -r myjob
立刻回到之前的运行界面,就像从未离开过。
tmux:现代终端复用利器
如果你习惯使用分屏或多任务并行,tmux 是更好的选择。它功能更强大,支持分窗格、多窗口和高度定制。
创建一个命名会话:
tmux new-session -d -s worker
附加到该会话:
tmux attach -t worker
即使断网,会话仍在服务器上运行,下次登录照样能接回去。
实际场景举例
比如你要从远程 API 拉取一个月的数据,预计跑六小时。直接在笔记本终端运行,中途合盖休眠一次就全停了。换成 screen 或 tmux 部署在公司服务器上,第二天来查,日志完整,任务已完成。
小贴士:别忘了检查进程状态
有时候不确定程序是否还在跑,可以用:
ps aux | grep python
或者查看具体端口占用:
lsof -i :8000
确保关键服务没有意外退出。
掌握这些方法后,再也不用守着终端等结果。把时间省下来,去做更重要的事。