我们在容器(AWS ECS)中运行 Horizon,当我们从 CI-CD 管道推送时,我们创建一个新的容器任务,并且(当前)我们拆除旧的任务,从而终止正在运行的作业。我们真正想做的实际上是让容器进程优雅地退出。容器进程只是一个以:
结尾的entrypoint.shphp artisan horizon
我们希望该进程停止在队列中获取新作业,并在任何挂起的作业完成时退出。我理解 ECS 命令,但我没有看到 Horizon 的任何内容,也许是一些 shell 命令?任何帮助表示赞赏。
您可以从
entrypoint.sh
脚本中调用此命令,如下所示:
php artisan horizon:terminate
但是,该命令不会等待所有作业完成才返回。如果您想在停止容器之前等待所有作业完成,您可以添加一个循环来检查是否有任何 Horizon 进程仍在运行:
php artisan horizon:terminate
while pgrep -f horizon > /dev/null; do sleep 1; done