如何让基于schedule的30天周期脚本关闭终端后持续运行
解决终端关闭后Python定时脚本终止的方法
你的脚本依赖终端会话存活,关闭终端时会话会向进程发送终止信号,导致脚本停止运行。以下是几种可靠的解决方式:
1. 使用nohup让进程后台运行
nohup 能让进程忽略终端关闭时的终止信号,配合&可将进程放到后台执行:
nohup python3 your_script.py &
- 默认情况下,脚本输出会写入当前目录的
nohup.out文件,也可以手动指定日志文件:nohup python3 your_script.py > csv_update_logs.txt 2>&1 & - 如需终止进程,先用
ps aux | grep your_script.py找到进程ID,再执行kill <进程ID>即可。
2. 用screen/tmux创建持久化会话
这类工具能创建独立于当前终端的会话,即使关闭终端,会话内的进程仍会持续运行:
screen操作步骤:
- 安装screen(Debian/Ubuntu:
sudo apt install screen;CentOS/RHEL:sudo yum install screen) - 创建专属会话:
screen -S csv_update_session - 在新会话中运行脚本:
python3 your_script.py - 按
Ctrl+A再按D分离会话,此时关闭终端不影响脚本运行 - 后续重新连接会话:
screen -r csv_update_session
tmux操作步骤(功能更丰富):
- 安装tmux:
sudo apt install tmux(对应系统的安装命令) - 创建会话:
tmux new -s csv_update_session - 运行脚本后按
Ctrl+B再按D分离会话,重新连接用tmux attach -t csv_update_session
3. 配置systemd服务(推荐长期运行场景)
将脚本注册为系统服务,由系统进程管理,开机自动启动,完全不受终端状态影响:
- 创建服务配置文件:
sudo nano /etc/systemd/system/csv-update.service - 写入以下内容(替换
your_username为你的系统用户名,/path/to/your_script.py为脚本的绝对路径):[Unit] Description=CSV自动更新服务 After=network.target [Service] User=your_username ExecStart=/usr/bin/python3 /path/to/your_script.py Restart=always RestartSec=10 [Install] WantedBy=multi-user.target - 保存退出后,重新加载systemd配置:
sudo systemctl daemon-reload - 启动服务:
sudo systemctl start csv-update.service - 设置开机自启:
sudo systemctl enable csv-update.service
- 查看服务运行状态:
sudo systemctl status csv-update.service - 查看服务日志:
journalctl -u csv-update.service -f
额外建议:在脚本中添加日志记录逻辑,比如用Python的logging模块替代print,将运行信息写入指定日志文件,方便后续排查问题。
内容的提问来源于stack exchange,提问作者Jamiu S.
相关产品推荐
相关产品推荐

