2017-03-10 11 views
1

docker Mongoコンテナを使用していて、bashスクリプトを使用してバックアップを取ろうとしています。独自に実行されるスクリプトはうまく動作します。 syslogでもcronが実行されているがコマンドが表示されていないことがわかります。私がcrontab -eでファイルを開き、保存して終了したら(:wq)、cronを再起動すると、ジョブは正常に動作します。再保存する前にdockerコンテナにcronファイルを再保存するまで、Cronジョブは機能しません

* * * * * /db_scripts/MongoDBBackup.sh >> /db_scripts/logs/backup.log 

これはsyslogの出力です:

ADD mongocron /etc/cron.d/ 
RUN tr -d '\015' </etc/cron.d/mongocron> /etc/cron.d/mongocron 
#RUN touch /etc/cron.d/mongocron 
#RUN echo "* * * * * /db_scripts/MongoDBBackup.sh >> /db_scripts/logs/backup.log\n" > /etc/cron.d/mongocron 
RUN crontab /etc/cron.d/mongocron 
RUN chmod 0644 /etc/cron.d/mongocron 

これは、ファイルmongocronにあるものである:ここでは

は私dockerfileの関連セクションで enter image description here

そして、ここに写真があります: After resaving

cronを単独で再起動しても修復されません。私は行末と関係があると感じています。なぜなら、dockerfileの改行でコメントアウトされた "エコー"戦略が表示される理由です。私はまた、私のコマンドが私がcrontab -lに表示されることを(保存する前に)確認しました。

+0

なぜ機能していないのですか?あなたの解決策は何ですか?私は同じ問題に会ったと思う。私はドクターが起動した後、 "crontab -l | crontab - "を使用して作業するためにcronを起動することができます。 –

答えて

0

私は過去に同じ問題を抱えていました。

野生でテストした実例は、DevBlogから取得しました。

FROM ubuntu:latest 

ADD start.sh /bin/start.sh 
RUN chmod +x /bin/start.sh 

# Add crontab file in the cron directory 
ADD crontab /etc/cron.d/thecron 

# Give execution rights on the cron job 
RUN chmod 0644 /etc/cron.d/thecron 

# Create the log file to be able to run tail 
RUN touch /var/log/cron.log 

# start script 
CMD /bin/bash /bin/start.sh 

start.sh

は、画像を構築しながら

# export all environment variables to use in cron 
env | sed 's/^\(.*\)$/export \1/g' > /root/envs.sh 
chmod +x /root/envs.sh 

# Run the command on container startup 
cron && tail -f /var/log/cron.log 

のcronファイルは、コピーされた..あなたはENV変数の輸出との一部を必要としないと思います。

0 1 * * * root . /root/envs.sh;/bin/backup.sh >> /var/log/cron.log 2>&1 
関連する問題