[英]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
已被截斷,但值得注意的是,要使其正常工作,您可能需要顯式安裝python3
和cron
,具體取決於您使用的基本映像。
如果我使用此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.