【问题标题】:Is there any way to auto restart after crashing in github workflowsgithub工作流程崩溃后有什么方法可以自动重启
【发布时间】:2021-10-30 03:06:09
【问题描述】:
Deleting original file NF - PAID MY DUES - youtube-LLAgke7QprM.f140.m4a (pass -k to keep)
/home/runner/work/_temp/9708cc07-bf79-4478-beda-081cae98f143.sh: line 3:  3270 Segmentation fault      (core dumped) python3 nani.py
Error: Process completed with exit code 139.

我正在尝试在 git 工作流程上托管我的 python 机器人。
它将播放音乐(在 Telegram 语音聊天中)。
但是一段时间后它总是崩溃。

有什么方法可以在出现任何错误后自动重新启动工作流程?

检查工作流实现的 Github 存储库:https://github.com/Nksama/workflows

【问题讨论】:

    标签: python telegram github-actions


    【解决方案1】:

    据我所知,目前还没有办法通过配置自动重启工作流......

    但是,使用带有 Github Actions 的工作流实现,有不同的方法可以实现类似的结果。这不会完全是重新启动,因为如果工作流失败,解决方法是重新启动工作流。


    第一个选项可能是使用带有workflow_run 触发器的另一个工作流来检查第一个工作流是否成功运行,如果没有,则发送调度事件以再次运行它(在这种情况下,您必须在第一个工作流中添加一个repository_dispatch 触发器)。


    另一种选择可能是在您的第一个作业(构建)结束时添加 2 个步骤,以将作业状态保存为工件。

          - name: Create file status_job1.txt and write the job status into it
            if: always()
            run: echo ${{ job.status }} > status_job1.txt
          - name: Upload file status_job1.txt as an artifact
            if: always()
            uses: actions/upload-artifact@v1
            with:
              name: pass_status_job1
              path: status_job1.txt
    

    然后,第二个作业总是会检查第一个作业的输出:

      job2:
        runs-on: ubuntu-latest
        needs: [job1]
        if: always()
        steps:
          - name: Download artifact pass_status_job1
            uses: actions/download-artifact@v1
            with:
              name: pass_status_job1
          - name: Set the status of Job 1, as output parameter
            id: set_outputs
            run: echo "::set-output name=status_job1::$(<pass_status_job1/status_job1.txt)"
          - name: Show the values of the output
            run: |
              # using the syntax steps.<step_id>.outputs.<output_name> to access the output parameter
              echo "status_job1 = ${{ steps.set_outputs.outputs.status_job1 }}"
              # other steps or commands to perform an operation according to its value.
              [...]
    

    例如,在 job2 的末尾,如果 job1 的状态为失败,您可以将 dispatch event 发送到同一工作流(在这种情况下,您必须将 repository_dispatch 触发器添加到工作流程)以再次启动工作流程(正如我所解释的,它不会完全重新启动,因为这将创建一个新的工作流程运行)。


    这里是action to create a repository dispatch event,或者你可以直接调用the Github API

    【讨论】:

      猜你喜欢
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多