linux命令停止后继续运行
linux命令停止后继续运行详细介绍
在 Linux 中,若希望命令在终端关闭或会话断开后继续运行,常用以下几种方法,具体取决于需求(如是否需要后台运行、是否需要重新连接会话等):
一、
nohup + &:后台运行且忽略挂断信号
适用于 无需交互、终端关闭后持续运行 的任务(输出默认保存到 nohup.out)。
用法:
bash
命令
nohup:使命令忽略终端挂断信号(HUP),即使关闭终端也不会终止。&:将命令放入后台运行,终端可继续执行其他操作。- 输出默认重定向到当前目录的
nohup.out,可通过tail -f nohup.out查看日志。 - 若需指定输出文件:bash
命令 日志文件.log >
管理后台任务:
- 查看当前会话的后台任务:
jobs - 恢复后台任务到前台:
fg %任务编号(如fg %1) - 再次放入后台:
bg %任务编号 - 终止后台任务:
kill %任务编号
二、
终端复用器:Screen / Tmux
适用于 需要长时间运行、支持断开后重新连接并交互 的任务(如 SSH 会话断开后继续运行)。
1.
Screen 工具(需先安装,Debian/Ubuntu:
apt install screen)
- 创建新会话:bash
会话名 - 在会话中运行命令(如
top、vim等),直接关闭终端或断开 SSH。 - 重新连接会话:bash
会话名 - 临时分离会话(不终止任务,回到原终端):按
Ctrl+A后再按D。
2.
Tmux 工具(功能更强大,推荐使用,安装:
apt install tmux)
- 创建新会话:bash
tmux new 会话名 - 分离会话:按
Ctrl+B后再按D。 - 查看所有会话:
tmux ls - 重新连接会话:bash
tmux attach 会话名 - 更多功能:分屏、会话共享等,通过
tmux help学习。
三、
disown:让现有后台任务忽略挂断信号
若命令已在后台运行(如用 & 启动),但未用 nohup,可通过 disown 使其忽略 HUP 信号:
bash
disown %1
四、
系统服务(systemd)
若需长期运行且作为系统服务管理(如 Web 服务、定时任务),可编写.service文件并加入 systemd 管理(适用于 CentOS 7+/Ubuntu 16.04+):
- 创建服务文件:bash
/etc/systemd/system/自定义服务名.service - 写入内容(示例):ini
- 启动并启用服务:bash
systemctl start 自定义服务名.servicesystemctl 自定义服务名.service
总结选择:
- 简单后台运行且无需交互:用
nohup 命令 &。 - 需要断开后重新连接并交互:用
screen或tmux。 - 长期运行的服务:用 systemd 或 supervisor。
根据具体场景选择合适的方法,确保任务在终端关闭后仍能持续运行。