【发布时间】:2016-10-25 08:41:26
【问题描述】:
我们正在尝试使操作系统信号(TERM、KILL 等)到达使用 shell 脚本启动的 Apache 服务器。这是我们正在尝试做的事情:-
1) 我们有一个以 :
结尾的 docker 文件 CMD ["sh","-c","/apps/scripts/run.sh" ]
这个想法是启动 apache 并将 docker 容器放在上面。
2) 然后我们有一个shell脚本run.sh:-
_term() {
echo "Caught signal!"
apachectl -k graceful-stop
}
trap _term SIGINT SIGTERM SIGWINCH
apachectl start &
PID=$!
echo "APACHE PID is ${PID}"
wait $PID
trap - SIGINT SIGTERM SIGWINCH
wait $PID
EXIT_STATUS=$?
echo "Exiting with Exit Status of ${EXIT_STATUS}"
这个想法是等待 Apache 服务器并在收到 SIGTERM/SIGINT/SIGWINCH 时优雅地杀死它。
我们面临的问题是:-
1) 在运行 docker 容器时,它会依次执行脚本,它会抛出以下错误并退出:
等待:pid 102 不是这个 shell 的子代
似乎 shell 脚本没有将 apachectl start & 视为子进程。
我们如何确保 shell 脚本向 apache 发送信号?
任何关于如何去做的帮助将不胜感激!
【问题讨论】:
-
您需要这样做吗?对于官方的httpd 镜像,Dockerfile 命令只是在前台模式下运行
httpd。 -
@EltonStoneman 是的..这是一个要求!....关于我们如何将 apache 的日志定向到作为后台进程运行的 STDOUT 的任何想法?
-
apachectl -k graceful-stop呢?
标签: linux apache shell unix docker