在 CentOS 上,你可以使用以下几种方法来确保 Python 脚本在断开终端后继续运行:
1. 使用 nohup
命令
nohup
命令可以让进程在终端关闭后继续运行。
bash
nohup python main.py > output.log 2>&1 &
nohup
:忽略挂断信号,使进程在终端关闭后继续运行。> output.log
:将标准输出重定向到output.log
文件。2>&1
:将标准错误输出重定向到标准输出(即output.log
文件)。&
:将进程放到后台运行。
2. 使用 screen
命令
screen
是一个终端多路复用器,可以让你在断开终端后重新连接到会话。
bash
# 安装 screen
sudo yum install screen
# 启动一个新的 screen 会话
screen -S mysession
# 在 screen 会话中运行 Python 脚本
python main.py
# 按下 Ctrl+A 然后按 D 来分离 screen 会话
# 重新连接到 screen 会话
screen -r mysession
3. 使用 systemd
服务
systemd
是 CentOS 的初始化系统,可以用来管理守护进程。
- 创建一个新的服务文件:
bash
sudo vi /etc/systemd/system/my_python_service.service
- 在文件中添加以下内容:
ini
[Unit]
Description=My Python Script
After=network.target
[Service]
ExecStart=/usr/bin/python3 /path/to/main.py
WorkingDirectory=/path/to/your/script
Restart=always
User=your_username
[Install]
WantedBy=multi-user.target
ExecStart
:指定要运行的命令。WorkingDirectory
:指定脚本的工作目录。Restart=always
:确保脚本在崩溃或系统重启后自动重启。User
:指定运行脚本的用户。
-
保存并退出编辑器。
-
重新加载
systemd
配置:
bash
sudo systemctl daemon-reload
- 启动服务:
bash
sudo systemctl start my_python_service
- 设置服务开机自启动:
bash
sudo systemctl enable my_python_service
4. 使用 tmux
命令
tmux
是另一个终端多路复用器,类似于 screen
。
bash
# 安装 tmux
sudo yum install tmux
# 启动一个新的 tmux 会话
tmux new -s mysession
# 在 tmux 会话中运行 Python 脚本
python main.py
# 按下 Ctrl+B 然后按 D 来分离 tmux 会话
# 重新连接到 tmux 会话
tmux attach -t mysession
总结
nohup
是最简单的解决方案,适合临时任务。screen
和tmux
适合需要交互的会话。systemd
是最健壮的解决方案,适合长期运行的守护进程。
根据你的需求选择合适的方法。