nginx 컨테이너의 Dockerfile
FROM nginx:latest
# Remove sym links from nginx image
RUN rm /var/log/nginx/access.log
RUN rm /var/log/nginx/error.log
RUN apt-get update && apt-get install -y logrotate && rm -rf /var/lib/apt/lists/*
COPY nginx.conf /etc/nginx/nginx.conf
# COPY conf.d /etc/nginx/conf.d
# COPY cert/ /etc/nginx/certs
COPY data /data
COPY --chown=root:root nginx /etc/logrotate.d/
RUN echo -e '#!/bin/sh\nlogrotate -f /etc/logrotate.d/nginx\n' > /etc/cron.daily/logrotate-nginx && chmod +x /etc/cron.daily/logrotate-nginx
EXPOSE 80 443
CMD service cron start && nginx -g 'daemon off;'
크론 서비스 실행 중
root@f11ddfdb471a:/# service cron status
cron is running.
크론탭
*/1 * * * * root /usr/sbin/logrotate /etc/logrotate.d/nginx
* * * * * echo "Hello world!" >> /var/log/cron.log 2>&1
빈 로그
root@f11ddfdb471a:/# cat /var/log/cron.log
root@f11ddfdb471a:/# cat /var/log/cron.log
문제는 단일 작업에만 국한된 것이 아니라 트리거되지 않는 logrotate도 있습니다.
내가 시도한 것
- cron 서비스를 수동으로 시작하고 nginx 컨테이너도 여러 번 다시 시작했습니다.
- 해당 작업을 수동으로 실행하면 제대로 작동합니다.
해결책
@AlexeyTen 사실 당신 말이 맞아요.
두 번째 작업에는 루트 사용자가 없고 첫 번째 작업에는 644 대신 664의 스크립트 권한이 있습니다.