nginx 사용자 정의 docker 이미지 내에서 cron 서비스가 실행 중이지만 실행 중인 작업은 아닙니다.

nginx 사용자 정의 docker 이미지 내에서 cron 서비스가 실행 중이지만 실행 중인 작업은 아닙니다.

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도 있습니다.

내가 시도한 것

  1. cron 서비스를 수동으로 시작하고 nginx 컨테이너도 여러 번 다시 시작했습니다.
  2. 해당 작업을 수동으로 실행하면 제대로 작동합니다.

해결책

@AlexeyTen 사실 당신 말이 맞아요.

두 번째 작업에는 루트 사용자가 없고 첫 번째 작업에는 644 대신 664의 스크립트 권한이 있습니다.

관련 정보