无断开烦恼!远程服务器后台运行程序的3种方法:`nohup`、`tmux`和`screen`
无断开烦恼!远程服务器后台运行程序的3种方法:nohup、tmux和screen
Uninterrupted Remote Program Execution: 3 Methods
在数据分析或机器学习项目中,经常需要在远程服务器上运行耗时长、计算密集型的任务。通过SSH连接到远程服务器是常见的操作方式。但是,如何确保在断开SSH连接之后,远程服务器上的程序能够继续运行呢?本文详细介绍了三种方法:nohup、tmux和screen。
使用nohup命令
开始
连接到远程机器:在本地终端中执行以下命令。
1
ssh username@remote-server-address
启动后台程序:在远程机器上执行。
1
nohup your-command-to-run-the-program &
例如:
1  | nohup python train_model.py &  | 
此方法会将程序的输出重定向到一个名为nohup.out的文件中。
结束
在远程机器上执行以下命令。
**查找程序的进程ID (PID)**:
1
ps aux | grep your-command-to-run-the-program
结束进程:
1
kill -9 PID
输出含义:
当你执行如下命令:
1  | nohup python train_model.py &  | 
你可能会看到这样的输出:
1  | [1] 337082  | 
这里,
- 1 337082 表示该任务现在在后台运行,PID(进程ID)为337082。
- 337082: 这是该后台作业对应的进程ID (PID)。你可以使用这个PID来监视或结束该进程。
 
 - nohup: ignoring input and appending output to ‘nohup.out’ 表示该进程现在将忽略任何输入,并将输出追加到 
nohup.out文件。- 这是 
nohup命令的标准消息,含义如下:ignoring input: 当你使用nohup命令,它将不会接收任何从终端输入的数据。这意味着,一旦你使用nohup启动了一个程序,你不能再向它提供任何交互式输入(除非程序有其他的输入方法)。appending output to 'nohup.out': 默认情况下,nohup会将程序的输出重定向到一个名为nohup.out的文件中。所以,如果你的程序在执行过程中产生了任何输出(如打印语句),这些输出都会被写入到nohup.out文件中。如果该文件之前不存在,nohup会自动创建它;如果文件已存在,nohup会将新的输出追加到文件的末尾。- 如果你想查看程序的输出,你可以使用 
cat或tail命令来查看nohup.out文件的内容。例如,使用tail -f nohup.out可以实时查看该文件的末尾内容,这对于监视程序的运行状态很有用。 
 
 - 这是 
 
使用tmux
开始
- **安装
tmux**:在远程机器上执行以下命令。 
- Ubuntu/Debian  
1
sudo apt-get install tmux # Ubuntu/Debian
 - MacOS  
1
brew install tmux
 
连接到远程机器:在本地终端中执行。
1
ssh username@remote-server-address
开始新的tmux会话:在远程机器上执行。
1
tmux
然后在tmux会话内运行您的程序。
- 断开会话:在远程机器上按 
Ctrl+b d。 
结束
在远程机器上执行以下命令。
重新连接到tmux会话:
1
tmux attach
结束程序和会话:使用
Ctrl+c结束程序,然后按Ctrl+b再按x结束tmux会话。
使用screen
开始
- **安装
screen**:在本地终端中执行。 
- Ubuntu/Debian  
1
sudo apt-get install screen # Ubuntu/Debian
 - MacOS  
1
brew install screen
 
连接到远程机器:在本地终端中执行。
1
ssh username@remote-server-address
开始新的screen会话:在远程机器上执行。
1
screen
然后在screen会话内运行您的程序。
- 断开会话:在远程机器上按 
Ctrl+a d。 
结束
在远程机器上执行以下命令。
重新连接到screen会话:
1
screen -r
结束程序和会话:使用
Ctrl+c结束程序,然后按Ctrl+a再按k结束screen会话。
特殊情况:macOS用户
macOS用户可以使用Homebrew来安装tmux或screen。
安装
tmux:1
brew install tmux
安装
screen:1
brew install screen