我使用 GitLab 管道来
a) 停止远程服务器上的 python 进程
b) 部署新版本的 python 代码
c) 触发 python 进程的重启(不要等待它完成)
最后一步有问题c).
a) 的工作没有问题并立即完成。因此,在 GitLab 管道中使用
ssh
远程执行 *.sh 脚本似乎没有普遍问题。
c)
的工作确实启动了 python 进程,我用于它的帮助脚本似乎已经完成。 但是运行远程脚本后,GitLab作业卡住,一直等待
这是我的 gitlab-ci.yml
中用于工作 c) 的
ssh 命令:
ssh -p 222 [email protected] ./path/to/start_server.sh
远程脚本的内容
start_server.sh
:
#!/bin/bash
#set -xv
cd my_directory
# Installs python dependencies
# The grep part removes "already satisfied" messages from the pip3 install output
pip3 install -r requirements.txt | grep -v 'already satisfied'
cd src
(
tmux -c "python3 main.py > /dev/null" # starts server in background task to keep it open after script finished
) &
在 GitLab 作业输出的末尾,我看到三个点
...
表示作业继续运行:
=> 我怎样才能正确地告诉 GitLab 和/或 ssh
不等待子进程
不等待子进程的控制台输出
我尝试了几种没有帮助的方法:
a) 在行尾添加
&
:
ssh -p 222 [email protected] ./path/to/start_server.sh &
b) 使用
nohup
命令:
nohup ssh -p 222 [email protected] ./path/to/start_server.sh
或
ssh -p 222 [email protected] nohup ./path/to/start_server.sh
或在
start_server.sh
:
nohup python3 main.py &
c)包括额外的
bash
命令:
ssh -p 222 [email protected] bash ./path/to/start_server.sh
d)使用
-t
选项:
ssh -p 222 -t [email protected] ./path/to/start_server.sh
e) 将 gitlab-runner 更新到当前版本 15.9.1
f) 启用 Gitlab 调试跟踪
job_back_start:
variables:
CI_DEBUG_TRACE: "true"
相关:
https://forum.gitlab.com/t/gitlab-com-runner-never-finishes-after-script-is-completed/63817
https://gitlab.com/gitlab-org/gitlab-runner/-/issues/4025
https://gitlab.com/gitlab-org/gitlab-runner/-/issues/1979
https://gitlab.com/gitlab-org/gitlab-runner/-/issues/1962
编辑:
如果我包含详细选项
-v
,工作有时会完成。然而,它仍然需要 > 1 分钟,主要是在脚本已经执行之后等待:
ssh -p 222 -v [email protected] ./path/to/start_server.sh
...
我想避免的等待步骤发生在输出的第 107 行和 108 行之间,在我已经得到返回值之后:
a) 我使用
at
命令让它工作:
ssh -p 222 [email protected] "at now < ./path/to/start_server.sh"
另见相关问题
b) 同样有用的是等待几秒钟并终止 ssh 进程:
- ssh -p 222 [email protected] ./path/to/start_server.sh &
- sleep 5
- pkill ssh
c)start_server.sh脚本的内容可以简化为
#!/bin/bash
#set -xv
cd my_directory
# Installs python dependencies
# The grep part removes "already satisfied" messages from the pip3 install output
pip3 install -r requirements.txt | grep -v 'already satisfied'
cd src
python3 main.py