Cron
docker - root 沒有 crontab
我的 Dockerfile 似乎建構正確(它告訴我是這樣)。當我執行容器時,我收到以下錯誤消息。我嘗試在
CMD
有和沒有服務目錄的情況下執行命令 ( )。
crontab.sh
基本上將 cron 計劃寫入文本文件 (cron.jobs
),然後將文本文件導入 crontab。Dockerfile:
FROM node:0.10 MAINTAINER Tom VOLUME /var/log/ RUN mkdir /pulse ADD . /pulse WORKDIR /pulse RUN apt-get update && apt-get install -y cron ADD *.sh /pulse/ RUN chmod 750 /pulse/crontab.sh && chmod 750 /pulse/ RUN chmod 644 /etc/crontab CMD cron -f CMD touch /var/log/cron.log && sh /pulse/crontab.sh && tail -f /var/log/cron.log CMD cron /pulse/cron.jobs CMD crontab -l
edited to add crontab.sh
crontab.sh(一些 crons 已被刪除):
#!/bin/bash cat <<- 'EOF' > cron.jobs 0 * * * * node /pulse/scripts/awsPulseTest.js > /tmp/awsPulseTest.log 2>&1 EOF crontab cron.jobs
錯誤:
no crontab for root
旁注:
- Pulse 是服務的名稱。
- 由於服務原因node版本過舊,將進行升級。
- 該服務主要用於節點中的 cron 作業
這是 dockerfile 的問題(而不是文件中的命令)。只
CMD
執行一個(最後一個) - 請參閱https://docs.docker.com/engine/reference/builder/#cmd一個 Dockerfile 中只能有一個 CMD 指令。如果您列出多個 CMD,則只有最後一個 CMD 才會生效。
正如其他答案已經解釋的那樣,
CMD
每個 Dockerfile 只會執行一個,並且您要執行的命令是錯誤的。但是您的設置 IMO 存在一個更緊迫的問題 - Docker 容器通常不設計為以這種方式工作。相反,您應該做的是從主機(或您的協調器)作為一次性程序執行 cron 服務(可能使用類似
docker run
or的東西docker-compose run
,或者,如果由於某種原因您不想為此啟動一個單獨的容器,我猜你可以使用docker exec
)。這只是我對如何使用容器的看法,所以顯然你應該對它持保留態度。