这一切都从这篇关于在 docker 中设置 nginx 和 certbot 的文章开始。在手册的最后,作者使用以下命令为 nginx 进行了自动证书更新:
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
Run Code Online (Sandbox Code Playgroud)
我不是唯一一个不理解这部分的人,所以有一个问题:Why do sleep & wait in bash?
得到的答案是原始命令并不完美,这是更正后的版本:
/bin/sh -c 'nginx -g \"daemon off;\" & trap exit TERM; while :; do sleep 6h & wait $${!}; nginx -s reload; done'
Run Code Online (Sandbox Code Playgroud)
但在这个命令中我看到nginx -g \"daemon off;\" &
为什么我们首先将 nginx 放在前台然后将其放入后台?有什么影响?为什么不首先在后台启动 nginx?
另一个问题:据我了解,while与原始命令不同,该周期保留在 docker 的前台。但是如果nginx if后台,是否意味着它死了,docker不在乎?前台while仍在工作,没问题。 …