如果你直接关闭终端,在终端中启动的程序通常会因为收到 SIGHUP 信号而停止运行。
要让程序在后台持续运行,并且在你关闭终端后不受影响,同时还能在下次登录时查看其输出,有几种常用的方法:
- 使用 nohup 命令 (最简单)
nohup 命令可以使程序忽略 SIGHUP 信号,从而在终端关闭后继续运行。你可以将程序的输出重定向到一个文件,以便后续查看。
用法:
1 nohup python your_script.py > output.log 2>&1 &
解释:
- nohup: 确保程序在终端关闭后不会停止。
- python your_script.py: 你要运行的 Python 脚本。
-
output.log: 将标准输出重定向到 output.log 文件。
- 2>&1: 将标准错误输出也重定向到标准输出(即 output.log 文件)。这样,所有的输出(包括错误信息)都会写入这个文件。
- &: 将整个命令放到后台运行。
查看结果:
- 程序启动后,你会看到一个 PID(进程ID)。
- 你可以随时使用 tail -f output.log 来实时查看输出。
- 或者使用 cat output.log 查看完整输出。
- 要停止程序,可以使用 kill 命令。
- 使用 screen 或 tmux (推荐,更强大)
screen 和 tmux 是终端复用工具,它们允许你创建持久化的终端会话。即使你关闭了 SSH 连接,会话也会在服务器上继续运行。当你再次登录时,可以重新连接到这些会话。
使用 screen
screen 通常在大多数 Linux 系统上预装。
基本用法:
- 启动一个新的
screen会话:
1 screen -S my_session_name
(my_session_name 是你给会话起的名字,方便识别)
2. 在 screen 会话中运行你的程序:
1 python your_script.py
程序会像在普通终端中一样运行,并显示输出。
3. 分离 (Detach) screen 会话:
按下 Ctrl + A,然后松开,再按下 D 键。
你会回到原来的终端,并看到类似 "[detached from ...]" 的消息。此时,你的程序仍在 screen
会话中运行。
-
关闭终端或断开 SSH 连接。
-
重新连接 (Reattach)
screen会话: 当你再次登录服务器时,可以列出所有 screen 会话:
1 screen -ls
然后重新连接到你的会话:
1 screen -r my_session_name
(如果只有一个会话,可以直接 screen -r)
6. 结束 screen 会话:
在 screen 会话中,当你的程序运行完毕或你手动停止程序后,输入 exit 或按下 Ctrl + D 即可关闭
screen 会话。
使用 tmux
tmux 功能与 screen 类似,但通常被认为是更现代、更易用的替代品。如果你的系统没有预装,可能需要先安装 (sudo apt-get install tmux 或 sudo yum install tmux)。
基本用法:
- 启动一个新的
tmux会话:
1 tmux new -s my_session_name
- 在
tmux会话中运行你的程序:
1 python your_script.py
-
分离 (Detach)
tmux会话: 按下 Ctrl + B,然后松开,再按下 D 键。 -
关闭终端或断开 SSH 连接。
-
重新连接 (Reattach)
tmux会话: 当你再次登录服务器时,可以列出所有 tmux 会话:
1 tmux ls
然后重新连接到你的会话:
1 tmux attach -t my_session_name
- 结束
tmux会话: 在 tmux 会话中,当你的程序运行完毕或你手动停止程序后,输入 exit 或按下 Ctrl + D 即可关闭 tmux 会话。
总结:
- 如果你只是想简单地让一个命令在后台运行并记录输出,用 nohup 就足够了。
- 如果你需要更灵活地管理后台任务,例如随时查看实时输出、暂停、恢复或在一个会话中运行多个命令,那么 screen 或 tmux 是更好的选择。推荐使用 screen,因为它通常是开箱即用的。