Debian
Cron 作業在後台執行,服務員在 python:3.7.6-buster (debian) 容器中
我正在嘗試在服務員 http 伺服器旁邊的容器中執行 cron 作業。無論我做什麼,我似乎都無法讓 cron 在容器內自動啟動……
這是我的碼標頭檔:
FROM python:3.7.6-buster RUN apt-get update -y && apt-get install -y python3-dev cron WORKDIR /home/user COPY . . RUN echo "* * * * * root echo hello >> /home/log.log 2>&1\n" > /etc/cron.d/task RUN chmod 0644 /etc/cron.d/task RUN crontab /etc/cron.d/task RUN touch /home/log.log CMD cron EXPOSE 80 ENTRYPOINT [ "waitress-serve" ] CMD [ "-call", "main:main" ]
我也嘗試過啟動 cron 服務,但是當容器啟動時,
service cron status
顯示以下內容:
[FAIL] cron is not running ... failed!
我究竟做錯了什麼?
您沒有在 dockerfile 中的任何地方啟動 cron。容器也不使用 init.d 和 systemd,它們不是虛擬機,也沒有自己的 systemd/init.d。這就是您看到以下錯誤的原因:
[FAIL] cron is not running ... failed!
我的解決方案是編寫簡單的 bash 腳本(或者只是更改整個 CMD),它啟動 crond 和其他你想在後台工作的東西。例子:
crond -P -n -s && waitress-serve -call main:main && tail -f /home/log.log
命令tail -f用於防止立即退出容器。標誌*-P -n -s*用於從環境 (-P) 繼承路徑,將作業輸出發送到 syslog,這是可選的,這只是我的偏好 (-s) 並在後台工作 (-n)。
然後只需複制該腳本並將您的 CMD 更改為:
CMD script.sh
還將它添加到您的 dockerfile 中。這對於-n標誌是強制性的。
RUN sed -i '/session required pam_loginuid.so/c\#session required pam_loginuid.so' /etc/pam.d/crond
我認為這現在應該可以了。如果您遇到問題,請給我留言。這是我在這裡的第一個解決方案,所以請耐心等待:D