Debian

Cron 作業在後台執行,服務員在 python:3.7.6-buster (debian) 容器中

  • July 15, 2020

我正在嘗試在服務員 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!

我究竟做錯了什麼?

Docker 與虛擬機

您沒有在 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

引用自:https://serverfault.com/questions/1025048