批评我的docker入口点sed重新加载Nginx

问题描述

我需要每6小时重新加载nginx docker容器(对于Letsencrypt certificate renewal)。

所以我想出了这个(骇人的方法):

# Dockerfile

FROM nginx:1.19.4-alpine

# replace the first empty line
RUN sed -i '1,/^$/{s/^$/\nwhile :; do sleep 6h \& wait ${!}; done \&\n/}' /docker-entrypoint.sh

因此docker-entrypoint.sh的第一行从:

#!/bin/sh
# vim:sw=4:ts=4:et

set -e

收件人:

#!/bin/sh
# vim:sw=4:ts=4:et

while :; do sleep 6h & wait ${!}; done &

set -e

我为什么要这样做?我想保持官方形象,并尽量减少自己的修改。这样,维护的工作量应该减少了(不同于我自己的输入脚本)。

我正在寻找有关以下方面的反馈意见:

  1. 我知道这是黑客。但是我猜想入口文件在将来的某个时刻几乎没有空行的机会。你怎么说?
  2. 我已经测试了它的睡眠时间短一些,echo,并且可以正常工作。仍然,您发现它有任何问题吗?
  3. docker stop命令向PID 1(此处为nginx)发送信号时,sleep 6h进程也将被杀死,并且没有像僵尸进程或其他任何副作用吗?
  4. 有点不对劲:nginx -s reload没记录什么吗?我还没有在docker logs中看到“已重新加载”消息。甚至没有supposedly debug modedocker run -d nginx:latest 'nginx-debug' '-g' 'daemon off;'。尝试了两种方式:
docker exec -it ceff1757061f nginx -s reload
2020/11/11 22:12:48 [notice] 36#36: signal process started


docker exec -it ceff1757061f sh
/ # nginx -s reload
2020/11/11 22:13:13 [notice] 57#57: signal process started

在nginx容器日志中仍然没有“重新加载”消息。

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...