问题:

在 docker 里面使用 supervisor 启动 nginx 这一方法中,在 nginx 的error.log 日志里面会看到一些关于 supervisor 的信息。supervisor.log is too small 截图如下所示:

2021/12/30 11:54:18  [crit] 16#0:cache file"/tmp/nglnx-stdout---supervisor.log" is too small
2021/12/30 11:54:18  [crit] 16#0:cache file"/tmp/nginx-vts-exporter-stdout---supervisor.log" is too small

现象:

  1. 在容器启动后,这个日志并不是马上出现的,而是等一会才出现。
  2. 启动容器后,进入容器的/tmp 目录中,发现这些文件是存在。过一会就看不到了。

解决方法:

在配置 supervisor 启动 nginx 的时候,要把 log 移动到别目录,不能放在/tmp中,比如/var/log 中。比如这样配置:

[program:nginx]
command=nginx -g 'daemon off;'
directory=/usr/local/nginx/sbin     ;进程运行目录
startsecs=5                         ;启动5秒后没有异常退出表示进程正常启动,默认为1秒
autostart=true                      ;在supervisord启动的时候也自动启动
autorestart=true                    ;程序退出后自动重启
redirect_stderr=true                ;如果是true,则进程的stderr输出被发送回其stdout文件描述符上
stdout_logfile_maxbytes=100MB       ;指定日志文件最大容量
stdout_logfile_backups=10           ;指定日志文件备份数
stdout_logfile=/var/log/supervisor/nginx-stdout-supervisor.log ;将进程stdout输出到指定文件
stdout_capture_maxbytes=1MB         ;写入capture FIFO的最大字节数限制

这样启动supervisor 就不会报log too small 的错误。