簡體   English   中英

Docker:容器內的 cron 沒有錯誤但仍然無法正常工作

[英]Docker: cron within container no errors but still not working

我是碼頭工人的新手。 設法創建一個腳本,該腳本從在線資源獲取信息並填充 SQL DB。 在 docker 容器中一切正常。

但是,我需要讓它每分鍾運行一次。

所以我修改了我的工作 Dockerfile 並添加了以下內容:

Dockerfile:

RUN apt-get install -y cron
COPY cronms /etc/cron.d/cronms
RUN chmod 0644 /etc/cron.d/cronms
RUN crontab /etc/cron.d/cronms
RUN touch /var/log/cron.log
    
CMD cron && tail -f /var/log/cron.log

#CMD [ "python3", "./my_script.py" ]  -- command before cron

我的 cronms 文件:

*/1 * * * * /usr/bin/python3 /my_script.py

圖像構建沒有錯誤,但是在運行它時沒有下載數據。

請問我缺少什么?

謝謝

您的 crontab 文件的語法不正確。 cron手冊頁

系統 crontab ( /etc/crontab ) 和包 crontabs ( /etc/cron.d/* ) 使用相同的格式,只是命令的用戶名是在時間和日期字段之后和命令之前指定的。

因此,您的cronms文件應如下所示:

*/1 * * * * root /usr/bin/python3 /my_script.py

我假設您問題中的Dockerfile已被截斷,但值得注意的是,要使其正常工作,您可能需要顯式安裝python3cron ,具體取決於您使用的基本映像。


如果我使用此Dockerfile構建圖像:

FROM ubuntu:20.04

RUN apt-get update
RUN apt-get install -y cron python3
COPY cronms /etc/cron.d/cronms
RUN chmod 0644 /etc/cron.d/cronms
RUN crontab /etc/cron.d/cronms
RUN touch /var/log/cron.log

COPY my_script.py /my_script.py

CMD cron && tail -f /var/log/cron.log

而這個cronms

*/1 * * * * root /usr/bin/python3 /my_script.py

而這個my_script.py

#!/usr/bin/python3

import time

with open("/tmp/datafile", "a") as fd:
    fd.write(time.ctime())
    fd.write("\n")

然后我可以確認一切都按預期工作:腳本每分鍾執行一次。

但是請注意,沒有任何內容寫入/var/log/cron.log ,因為cron記錄到 syslog,而不是文件。 要查看cron的輸出,您需要安排運行 syslog 守護程序,或使用不同的 cron 守護程序(例如,busybox crond命令可以記錄到文件或 stderr)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM