无断开烦恼!远程服务器后台运行程序的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