我有一个脚本需要在另一个程序中循环运行。但我想捕获信号以正常停止循环。
这是我的可重现代码:
loop.sh
:
#!/bin/bash
COMMAND="logic.sh"
terminate=false
trap 'terminate=true' SIGTERM SIGINT
while true; do
if $terminate; then
echo "Termination signal received, waiting for the current process to finish..."
wait
echo "Process finished. Exiting..."
exit 0
fi
$COMMAND &
wait $!
done
logic.sh
:
#!/bin/bash
sleep 5
date +%s
Dockerfile
:
# FROM debian
FROM php:8.3-fpm
ADD loop.sh logic.sh /usr/local/bin/
CMD ["loop.sh"]
compose.yml
:
services:
app:
build: .
entrypoint: ''
init: true
为了测试它,我docker compose up --build
在另一个终端中运行 ; docker compose stop
。如果您看到Termination signal received, waiting for the current process to finish...
时间戳,则表示它正在运行。使用时FROM php:8.3-fpm
它没有按预期工作……但使用时FROM debian
是。
为什么它的表现不一样?我该如何让它与 一起工作FROM php:...
?
谢谢
如果你使用以下方式检查图像历史记录
您将看到此图像使用
QUIT
信号来通知进程是时候清理并离开了:QUIT
这意味着如果您想正常退出所包含的进程,您应该在陷阱中添加信号。