【发布时间】:2019-11-20 17:47:37
【问题描述】:
我无法理解此docker-compose.yml 中服务的启动命令。 .yml 中的两个相关行是:
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
和
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
为什么要将sleep 命令发送到后台然后等待呢?为什么不直接做sleep 6h?另外,双美元符号是否只是在 ${!} 中转义美元符号?
我正在寻找其他结合使用睡眠和等待的地方,但似乎没有任何解释原因:
【问题讨论】:
-
@LinpPy,但这些都没有解释这一点。
sleep 10 & wait ${!}与sleep 10有什么区别。如果你只是要等待 sleep 命令,为什么要让它成为后台进程? -
@Edvin 不,不是。这并不能解释为什么你会同时使用后台睡眠和等待,而不仅仅是前台睡眠。提问者已经知道每个部分分别做了什么,只是不知道为什么要这样组合它们。
-
哦。我刚刚得到你
-
只是一个猜测:等待时间很长,所以我不认为在正常情况下,我们希望进程真的应该等待几个小时。这意味着在正常情况下,某人(可能是管理 docker 的进程)必须做一些工作,如果它完成了,它希望你想用 docker-compose 运行的进程继续 .让进程继续可以通过杀死睡眠进程来完成。