GitHub Workflows运行崩溃后是否可以设置自动重启?
错误说明
你收到的exit code 139对应Linux系统的段错误(SIGSEGV),一般是机器人调用的语音播放相关底层依赖(比如ffmpeg、pytgcalls等C扩展库)出现内存访问异常导致的进程崩溃。
自动重启实现方案
方案1:工作流步骤内嵌Shell循环(最简便,无需修改业务代码)
直接修改你的工作流yaml文件中运行机器人的步骤,用无限Shell循环包裹启动命令,只要进程退出就自动重启:
- name: 启动Telegram音乐机器人(崩溃自动重启) run: | # 无限循环,进程退出就自动重启 while true; do python3 nani.py # 打印退出日志,可根据需要调整重启等待时间 echo "进程异常退出,退出码:$?,3秒后自动重启" sleep 3 done
方案2:工作流全局自动重试
如果需要整个工作流失败后自动重新运行,可以在工作流配置中添加失败重跑逻辑,配置如下:
# 工作流根层级配置 on: push: branches: [ main ] workflow_run: workflows: ["你的当前工作流名称"] types: - completed jobs: rerun-failed-workflow: runs-on: ubuntu-latest if: ${{ github.event.workflow_run.conclusion == 'failure' }} steps: - uses: actions/checkout@v4 - name: 重跑失败的工作流 uses: actions/github-script@v7 with: script: | await github.rest.actions.reRunWorkflowFailedJobs({ owner: context.repo.owner, repo: context.repo.repo, run_id: context.payload.workflow_run.id, })
注意事项
- 你遇到的段错误属于C扩展层面的崩溃,Python原生的
try-except无法拦截,不建议用Python内部异常捕获做重启逻辑 - GitHub公共运行器单次工作流最大运行时长为6小时,到期会被系统强制终止,如果你需要7*24小时不间断服务,建议使用独立VPS托管机器人
内容的提问来源于stack exchange,提问作者Yato
相关产品推荐
相关产品推荐

