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;'
cron 服務正在運行
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,事實上你是對的,
第二個作業缺少 root 用戶,第一個作業的腳本權限為 664 而不是 644