You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让基于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操作步骤:

  1. 安装screen(Debian/Ubuntu:sudo apt install screen;CentOS/RHEL:sudo yum install screen)
  2. 创建专属会话:
    screen -S csv_update_session
    
  3. 在新会话中运行脚本:python3 your_script.py
  4. 按Ctrl+A再按D分离会话,此时关闭终端不影响脚本运行
  5. 后续重新连接会话:screen -r csv_update_session

tmux操作步骤(功能更丰富):

  1. 安装tmux:sudo apt install tmux(对应系统的安装命令)
  2. 创建会话:tmux new -s csv_update_session
  3. 运行脚本后按Ctrl+B再按D分离会话,重新连接用tmux attach -t csv_update_session

3. 配置systemd服务(推荐长期运行场景)

将脚本注册为系统服务,由系统进程管理,开机自动启动,完全不受终端状态影响:

  1. 创建服务配置文件:sudo nano /etc/systemd/system/csv-update.service
  2. 写入以下内容(替换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
    
  3. 保存退出后,重新加载systemd配置:
    sudo systemctl daemon-reload
    
  4. 启动服务:
    sudo systemctl start csv-update.service
    
  5. 设置开机自启:
    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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 03:16:06