[解決済み] dockerコンテナ内でcronジョブを実行するには?
質問
シェルスクリプトを呼び出すドッカーコンテナ内でcronjobを実行しようとしています。
昨日、ウェブとスタックオーバーフローをくまなく探しましたが、うまくいく解決策は本当に見つかりませんでした。
どうすればいいのでしょうか?
EDITです。
を作成しました。 (コメント付き)githubリポジトリ このコンテナは、指定された間隔でシェルスクリプトを呼び出します。
解決方法は?
イメージにcrontabをコピーしておけば、そのイメージから起動したコンテナがジョブを実行するようになります。
"を参照してください。
Dockerでcronジョブを実行する
をご覧ください。
ジュリアン・ブーレー
で、彼の
Ekito/docker-cron
:
新規に"というファイルを作成しましょう。
hello-cron
"を使って仕事を記述します。
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
# An empty line is required at the end of this file for a valid cron file.
2>&1ってなんだろうと思っている方。 アイマン・ホウリイ 説明する .
次のDockerfileは、イメージを構築するためのすべてのステップを記述しています。
FROM ubuntu:latest
MAINTAINER [email protected]
RUN apt-get update && apt-get -y install cron
# Copy hello-cron file to the cron.d directory
COPY hello-cron /etc/cron.d/hello-cron
# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/hello-cron
# Apply cron job
RUN crontab /etc/cron.d/hello-cron
# Create the log file to be able to run tail
RUN touch /var/log/cron.log
# Run the command on container startup
CMD cron && tail -f /var/log/cron.log
(参照
ガァファル
's
コメント
と
を作るにはどうしたらいいのでしょうか?
apt-get
をインストールすると、ノイズが少なくなりますか?
:
apt-get -y install -qq --force-yes cron
も使えます)
ゴチャゴチャについて簡単にメモ。
スクリプト・ファイルを追加して、それを実行するようにcronに指示する場合、次のことを忘れないでください。
RUN chmod 0744 /the_script
Cronは忘れると黙って失敗する .
または、ジョブ自体がログファイルではなく、stdout/stderrに直接リダイレクトするようにしてください。 ヒューゴシャカ 's 答え :
* * * * * root echo hello > /proc/1/fd/1 2>/proc/1/fd/2
Dockerfileの最後の行を次のように置き換えます。
CMD ["cron", "-f"]
も参照してください(約
cron -f
は、cron "foreground"を意味する) "。
ドッカーウブントゥ
cron -f
が動作しない
"。
ビルドして実行します。
sudo docker build --rm -t ekito/cron-example .
sudo docker run -t -i ekito/cron-example
2分ほど待つと、コマンドラインが表示されるはずです。
Hello world
Hello world
ご注意ください
tail
は、イメージビルド中に作成された場合、正しいファイルを表示しないことがあります。
この場合、tail が正しいファイルをピックアップするために、コンテナ実行時にファイルを作成するか、タッチする必要があります。
"をご覧ください。
の出力
tail -f
の末尾にあるdocker
CMD
が表示されない
"です。
詳しくは"でご覧ください。 DockerでCronを実行する "(2021年4月)より。 ジェイソン・クラトゥンガ として 以下のコメント
ジェイソンの画像を見る
AnalogJ/docker-cron
をベースにしたものです。
-
Dockerfileのインストール
cronie
/crond
ディストリビューションによって異なります。 -
を初期化するエントリポイント。
/etc/environment
を呼び出してcron -f -l 2
関連
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerコンテナのシェルに入るにはどうしたらいいですか?
-
[解決済み] 古いDockerコンテナを削除する方法
-
[解決済み] Dockerイメージをコンテナとして実行する
-
[解決済み】Dockerは仮想マシンとどう違うの?
-
[解決済み】Dockerイメージとコンテナの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】apt-get でインストールしても docker コマンドが見つからない。
-
[解決済み] アルパインイメージでdockerを使ってbashをユーザrootで実行するには? su: suidでないと正常に動作しません。
-
[解決済み] Dockerの初期化に失敗しました
-
[解決済み] Dockerfileの "RUN chmod "が有効でない。
-
[解決済み] Dockerfileで-hオプションのように特定のホスト名を扱う方法
-
docker パーミッションが拒否されました。
-
docker-composeコンテナのマウント権限の問題
-
docker-composeはmysqlをボリュームでデプロイする際のパーミッション拒否の問題を解決します。
-
デーモンからのエラー応答: ***のマニフェストが見つかりません: マニフェスト不明: マニフェスト不明
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?