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

如何让Python脚本在GCP VM上持续稳定运行?

排查与解决GCP VM上Python脚本意外终止的问题

一、先明确终止原因(关键第一步)

  • 查看系统日志:在GCP VM上查看/var/log/syslog或执行journalctl命令,排查是否存在内存不足被系统终止(OOM killer)的记录,或是进程崩溃的系统级日志。
  • 给脚本添加详细日志:用Python的logging模块把运行日志写入文件,覆盖关键逻辑节点,方便事后排查:
    import logging
    logging.basicConfig(
        filename='script_runtime.log',
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s - %(message)s'
    )
    # 关键步骤插入日志
    logging.info("开始处理用户输入请求")
    
  • 改用带日志记录的启动方式:之前直接用python3 script.py启动,断开SSH会话后进程可能被终止,且无输出留存。换成nohup python3 script.py > script_output.log 2>&1 &,将标准输出和错误输出都写入日志,同时让进程在后台持续运行。

二、常见问题及对应解决方法

1. SSH会话断开导致进程终止

  • 问题根源:直接通过SSH启动脚本,断开会话时进程会收到SIGHUP信号被终止。
  • 解决:
    • 用nohup后台启动:如上述nohup python3 script.py > script_output.log 2>&1 &
    • 用会话管理工具:启动tmux或screen,在会话内运行脚本;断开SSH后重新连接时,用tmux attach或screen -r恢复会话。

2. 内存泄漏或资源耗尽

  • 问题根源:脚本长时间运行后内存占用持续升高,触发系统OOM killer强制终止进程(系统日志会有Out of memory: Killed process记录)。
  • 解决:
    • 排查代码内存占用:用memory_profiler工具分析,安装后执行python -m memory_profiler script.py,定位内存占用过高的代码段,清理未及时释放的对象或全局变量。
    • 升级VM配置:若业务确实需要更多资源,在GCP控制台调整VM的机器类型,提升内存或CPU配额。

3. 未捕获异常导致崩溃

  • 问题根源:脚本运行中遇到异常(如网络超时、输入格式错误),未用try-except捕获,直接触发崩溃。
  • 解决:
    • 关键代码块加异常捕获:在外部API调用、文件操作、用户输入处理等环节添加捕获逻辑,并记录详细错误日志:
      try:
          # 示例:调用外部API
          response = requests.get("https://example.com/api")
          response.raise_for_status()
      except Exception as e:
          logging.error(f"API调用失败: {str(e)}", exc_info=True)
          # 可选:处理异常后继续运行,避免脚本终止
      
    • 顶层全局异常捕获:在脚本入口处添加全局捕获,防止未预见的异常导致崩溃:
      def main():
          # 脚本主逻辑
          pass
      
      if __name__ == "__main__":
          try:
              main()
          except Exception as e:
              logging.critical(f"脚本意外终止: {str(e)}", exc_info=True)
      

4. GCP VM系统维护或自动重启

  • 问题根源:GCP会定期对VM进行内核更新等维护操作,可能导致实例重启,脚本随之终止。
  • 解决:
    • 查看GCP控制台实例操作日志,确认是否存在自动重启记录。
    • 设置脚本开机自启:将脚本注册为systemd服务,VM重启后自动恢复运行。示例配置文件/etc/systemd/system/script.service:
      [Unit]
      Description=Python Script Service
      After=network.target
      
      [Service]
      User=your_username
      WorkingDirectory=/path/to/script/directory
      ExecStart=/usr/bin/python3 script.py
      Restart=always  # 进程终止时自动重启
      RestartSec=5
      
      [Install]
      WantedBy=multi-user.target
      
    执行以下命令启用服务:
    sudo systemctl daemon-reload
    sudo systemctl enable script.service
    sudo systemctl start script.service
    

5. 外部依赖连接中断

  • 问题根源:脚本依赖的数据库、API长时间连接后断开,未实现重连逻辑导致崩溃。
  • 解决:
    • 数据库连接添加重连机制:检测连接状态,断开时自动重新建立连接。
    • API调用增加重试逻辑:用tenacity等工具实现自动重试,处理超时和连接错误。

内容的提问来源于stack exchange,提问作者Nani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:24:57