我有一个类似于以下代码的GitHub操作。我有一个文件可以永久运行,但是在需要时会被用户打断。我尝试使用timeout
,但是它不起作用,并给出了一些奇怪的消息。
一个小警告是,如果该过程超时,我希望这不会引发错误,以便该操作继续并报告成功。但是,如果python脚本本身失败了,我希望将其报告出来,因为将其运行一段时间以进行调试是在操作中运行它的目的。
name: Run file with interrupt then save results
on:
push:
branches:
- master
jobs:
build:
strategy:
matrix:
python-version: [3.7]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies for ex 06
run: |
python -m pip install --upgrade pip
cd /home/runner/work/repo_name/repo_name
pip install -r requirements.txt
- name: Run file with timeout
run: |
cd /home/runner/work/repo_name/repo_name/
echo "hi1"
timeout 5 sleep 10
echo "hi2"
python RunsForever.py
echo "hi3"
- name: Upload results
uses: actions/upload-artifact@v2
with:
name: result
path: /home/runner/work/repo_name/repo_name/output/
如何使超时正常工作?当前错误消息是:
Run cd /home/runner/work/repo_name/repo_name/
cd /home/runner/work/repo_name/repo_name/
echo "hi1"
timeout 5 sleep 10
echo "hi2"
python RunsForever.py
echo "hi3"
shell: /bin/bash -e {0}
env:
pythonLocation: /opt/hostedtoolcache/Python/3.7.8/x64
hi1
##[error]Process completed with exit code 124.
我不明白可能是什么问题。我希望问题与超时函数隐藏RunsForever.py
的输出有关,但实际上timeout
本身似乎不起作用。我尝试使用apt-get
安装,也无济于事。
是否有一些调试程序可以运行该调试程序?还有其他方法可以杀死进程,以便在预定时间后有效地中断它吗?
答案 0 :(得分:1)
更新
我已根据评论更新了响应,以提供添加超时的正确方法,并且在超时时仍然成功,同时还支持正常故障。
基本上,我们检查错误代码124(超时)和0(成功),并确保我们不会在这些代码上退出。但是,如果我们收到任何其他信息,那么我们将退出以匹配github操作在失败时通常执行的操作
代码段
- name: no timeout
run: timeout 10 python ./RunsForever.py || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; fi
- name: timeout # We add or so that return code is not none-zero which causes pipeline to fail
run: timeout 1 python ./RunsForever.py || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; fi
上一个响应
仅处理超时,但不继续运行超时而不会报告失败。但是OP希望它也能在超时时成功,因此上面提供了更新。
您可以通过使用超时分钟来做到这一点。以您的代码为例
- name: Run file with timeout
timeout-minutes: 1 # Times out after 1 minute
run: |
cd /home/runner/work/repo_name/repo_name/
echo "hi2"
python RunsForever.py
echo "hi3"
要为作业添加超时,请使用以下资源:https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes
要为单个步骤添加超时,请使用以下资源:https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepstimeout-minutes