【发布时间】:2023-02-23 23:17:53
【问题描述】:
在 gitlab-ci.yml 中构建过程之后如何运行基于服务的命令?
例如,我想运行:
php artisan queue:listen --timeout=0 &
问题是构建会永久运行,并且在等待此命令的结果时不会完成(即使此命令永远不会完成)。
无论如何我可以将它作为后台任务运行吗?我试过 nohup 没有运气。
【问题讨论】:
在 gitlab-ci.yml 中构建过程之后如何运行基于服务的命令?
例如,我想运行:
php artisan queue:listen --timeout=0 &
问题是构建会永久运行,并且在等待此命令的结果时不会完成(即使此命令永远不会完成)。
无论如何我可以将它作为后台任务运行吗?我试过 nohup 没有运气。
【问题讨论】:
以Runner启动的进程,即使你在末尾加上
nohup和&,也标有进程组ID。
作业完成后,Runner 会向所有的进程组。
因此,任何直接从 CI 作业启动的进程都将在作业结束时终止。如果您控制目标服务器,则使用 systemd 服务(如 same page 中所示)仍然是一个选项。
【讨论】:
在 VonC 的帮助下——这就是我采用的方法。
我使用的 Alpine Linux 与他提供的链接略有不同,但方法相同。
我在/etc/init.d 中创建了一个文件并赋予它chmod +x 权限。
内容如下:
#!/sbin/openrc-run
command="php /var/www/artisan queue:listen"
command_args="--timeout=0"
command_background=true
pidfile="/run/${RC_SVCNAME}.pid"
然后我在 gitlab-ci 配置文件中使用 rc-service laravel-queue start 运行它。
【讨论】: