2017-04-03 136 views
0

我有這個Dockerfile(這裏我使用miniconda只是因爲我想安排一些Python腳本,但它是一個debian:jessie泊塢窗圖像):的cron任務沒有被執行

FROM continuumio/miniconda:4.2.12 

RUN mkdir -p /workspace 
WORKDIR /workspace 
ADD volume . 

RUN apt-get update 
RUN apt-get install -y cron 

ENTRYPOINT ["/bin/sh", "/workspace/conf/entrypoint.sh"] 

腳本entrypoint.sh ,保持容器活着是這個:

#!/usr/bin/env bash 

echo ">>> Configuring cron" 
service cron start 
touch /var/log/cron.log 
mv /workspace/conf/root /var/spool/cron/crontabs/root 
chmod +x /var/spool/cron/crontabs/root 
crontab /var/spool/cron/crontabs/root 
echo ">>> Done!" 

tail -f /var/log/cron.log 

從泊塢窗文檔中關於supervisorhttps://docs.docker.com/engine/admin/using_supervisord/)看起來可能是一種選擇,以及在bash腳本選項(如我的例子),這就是爲什麼我決定去bash腳本並忽略主管。

和cron的細節/workspace/conf/root內容是這樣的:

* * * * * root echo "Hello world: $(date +%H:%M:%S)" >> /var/log/cron.log 2>&1 

(在底部的一個空行\n

我不能找到一種方法,看到Hello world: $(date +%H:%M:%S)每分鐘追加到/var/log/cron.log,但對我來說所有的cron/crontab設置都是正確的。

當我檢查容器的日誌,我可以看到:

>>> Configuring cron 
[ ok ] Starting periodic command scheduler: cron. 
>>> Done! 

此外,登錄到運行容器時,我可以看到cron守護進程運行:

[email protected]:/workspace# ps aux 
USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root   1 0.0 0.0 4336 1580 ?  Ss+ 13:06 0:00 /bin/sh /workspace/conf/entrypoint.sh 
root   14 0.0 0.0 27592 2096 ?  Ss 13:06 0:00 /usr/sbin/cron 
root   36 0.0 0.0 5956 740 ?  S+ 13:06 0:00 tail -f /var/log/cron.log 
root  108 0.5 0.1 21948 3692 ?  Ss 13:14 0:00 bash 
root  114 0.0 0.1 19188 2416 ?  R+ 13:14 0:00 ps aux 

我在做什麼錯誤?

+0

碼頭是'類固醇過程'。如:一個過程。不是虛擬機。你不能假設'init'或'systemd'運行你只是交出'cron'守護進程任務。 –

+0

[Docker:Cronjob不能正常工作]的可能的重複(http://stackoverflow.com/questions/24943982/docker-cronjob-is-not-working) –

+0

從關於'supervisor'的docker文檔看起來可能是這樣的一個選項以及'bash'腳本選項(如我的例子),這就是爲什麼我決定去bash腳本並忽略'supervisor'。我不確定我明白爲什麼這個bash腳本是錯誤的。我也嘗試在bash腳本中用'cron'行替換'service cron start'行,但沒有成功。 – TPPZ

回答

0

您確定Cronjob擁有執行權嗎?

chmod 0644 /var/spool/cron/crontabs/root