确保 Python 脚本在远程 Linux 服务器中不挂断运行
在现代开发和运维中,远程访问 Linux 服务器已成为常态。特别是在运行长时间的 Python 脚本时,确保程序不因网络中断或终端关闭而挂断是至关重要的。两种常用的方法 ——
nohup
和screen
,帮助你在远程环境中平稳运行你的脚本。
1. 为什么要确保程序不挂断?
在远程工作时,网络连接可能会不稳定,或者你可能需要临时关闭终端。若在这些情况下运行的脚本未能保持活跃,可能会导致数据丢失或任务中断。尤其是在处理长时间运行的任务(如数据分析、机器学习模型训练等)时,意外中断会浪费大量时间和资源。因此,选择合适的方法来确保程序持续运行是非常重要的。
2. 使用方式与优劣势
2.1 使用 nohup
使用方式:
nohup
(no hang up)命令用于忽略挂起信号,使得程序在用户退出后仍然继续运行。基本用法如下:
nohup python your_script.py &
&
符号将程序放入后台运行。- 输出将默认重定向到
nohup.out
文件中。
优点:
- 简单易用:只需在命令前加上
nohup
,非常适合快速启动脚本。 - 轻量级:不需要额外的工具或配置。
缺点:
- 输出管理:默认输出到
nohup.out
,如果不监控该文件,可能会错过重要信息。 - 无法交互:无法与运行中的程序进行交互,适合于不需要用户输入的任务。
2.2 使用 screen
使用方式:
screen
是一个终端多路复用器,允许在一个会话中创建多个虚拟终端。使用步骤如下:
-
安装
screen
- 如果你的系统未安装
screen
,可以使用以下命令进行安装:
对于 Debian/Ubuntu 系统:
sudo apt-get install screen
对于 CentOS/RHEL 系统:
sudo yum install screen
- 如果你的系统未安装
-
启动一个新的
screen
会话并指定名称- 使用
-S
选项来指定会话名称,便于后续管理:
screen -S my_session_name
- 使用
-
在
screen
会话中运行 Python 脚本- 将
your_script.py
替换为你要运行的脚本名称:
python your_script.py
- 将
-
将会话放入后台
- 按下
Ctrl + A
然后按D
,这将使当前screen
会话放入后台,脚本将继续运行。
- 按下
-
查看当前运行的
screen
会话screen -ls
- 这将显示所有当前的
screen
会话及其状态。
- 这将显示所有当前的
-
通过名称重新连接到一个
screen
会话- 将
my_session_name
替换为你指定的会话名称:
screen -r my_session_name
- 将
-
退出
screen
会话- 在
screen
会话中,输入exit
命令:
exit
- 当你在
screen
会话中输入exit
,会话将结束,脚本也会停止运行。
- 在
常用命令总结:
- 启动新会话并指定名称:
screen -S my_session_name
- 放入后台:
Ctrl + A
然后按D
- 列出会话:
screen -ls
- 通过名称重新连接会话:
screen -r my_session_name
- 退出会话:
exit