シェル スクリプトを呼び出す docker コンテナ内で cron ジョブを実行しようとしています。
昨日オンラインとスタック オーバーフローで検索しましたが、実際に機能する解決策が見つかりません。
これどうやってするの?
承認された回答 運用環境では危険な可能性があります。
CMD cron && tail -f /var/log/cron.log を使用すると、cron プロセスは基本的にフォークしてバックグラウンドで cron を実行し、メイン プロセスが終了します。 tailf をフォアグラウンドで実行させます。バックグラウンドの cron プロセスは気付かないうちに停止または失敗する可能性があり、コンテナーは引き続きサイレントに実行され、オーケストレーション ツールはコンテナーを再起動しません。
を使用すると、cron プロセスは基本的にフォークしてバックグラウンドで
を実行し、メイン プロセスが終了します。
をフォアグラウンドで実行させます。バックグラウンドの cron プロセスは気付かないうちに停止または失敗する可能性があり、コンテナーは引き続きサイレントに実行され、オーケストレーション ツールはコンテナーを再起動しません。
リーリー
CMD ["cron", "-f"]
ただし、 の場合は、非 root ユーザー としてタスク を実行します。
crontab をイメージにコピーすると、そのイメージから起動されたコンテナーがジョブを実行できます。
crontab
重要: docker-cron 問題 3 と同様: cron ファイルには CRLF の代わりに LF を使用します。
cron
SeeDocker を使用した cron ジョブの実行" /github.com/julienboulay" rel="noreferrer">Julien Boulay の Ekito/docker -cron :
2>&1 が何なのか知りたい場合は、Ayman Hourieh が説明します。 リーリー
2>&1
ただし: cron が停止しても、container は引き続き実行されます。 (
が停止しても、
の コメント および apt-get のインストールのノイズを軽減する方法を参照してください。 : apt-get -y install -qq --force-yes cron も機能します) Nathan Lloyd が
Nathan Lloyd
にコメントしたように: あるいは、hugoShaka
: のように、ジョブ自体がログ ファイルではなく stdout/stderr に直接リダイレクトされるようにします。 リーリー Dockerfile の最後の行を に置き換えます。 リーリー
の場合は、非 root ユーザー
を実行します。 「cron -f、cron "フロントエンド" について」も参照してください。「
cron -f は機能しません 」 ビルドして実行します: リーリー リーリー
は機能しません
エリック
: 「docker CMD」の最後にある「
出力 > 表示されない 」を参照してください。 ”末尾的 詳細については、
による「Docker での Cron の実行」 (2021 年 4 月) を参照してください。コメントは次のとおりですJason の画像を表示 AnalogJ/docker-cron に基づく: Dockerfile は、ディストリビューションに応じて、cronie/crond をインストールします。 エントリ ポイントの初期化/etc/environment次に呼び出し リーリー
Jason の画像を表示 AnalogJ/docker-cron に基づく:
AnalogJ/docker-cron
Dockerfile は、ディストリビューションに応じて、cronie/crond をインストールします。
cronie
crond
エントリ ポイントの初期化/etc/environment次に呼び出し
/etc/environment
承認された回答 運用環境では危険な可能性があります。
CMD cron && tail -f /var/log/cron.log
基本的なシェル リダイレクトを使用して、次のことを実行できます:を使用すると、cron プロセスは基本的にフォークしてバックグラウンドで
cronを実行し、メイン プロセスが終了します。
tailfをフォアグラウンドで実行させます。バックグラウンドの cron プロセスは気付かないうちに停止または失敗する可能性があり、コンテナーは引き続きサイレントに実行され、オーケストレーション ツールはコンテナーを再起動しません。
リーリー
CMD は次のようになります:CMD ["cron", "-f"]
ただし、 の場合は、非 root ユーザー としてタスク を実行します。
crontab
をイメージにコピーすると、そのイメージから起動されたコンテナーがジョブを実行できます。重要: docker-cron 問題 3 と同様:
cron
ファイルには CRLF の代わりに LF を使用します。SeeDocker を使用した cron ジョブの実行" /github.com/julienboulay" rel="noreferrer">Julien Boulay の Ekito/docker -cron :
リーリー2>&1
が何なのか知りたい場合は、Ayman Hourieh が説明します。 リーリーただし: cron
Gaafarが停止しても、
container は引き続き実行されます。 (の コメント および apt-get のインストールのノイズを軽減する方法を参照してください。 :
apt-get -y install -qq --force-yes cron も機能します)
Nathan Lloyd
がにコメントしたように: あるいは、hugoShaka
answer
: のように、ジョブ自体がログ ファイルではなく stdout/stderr に直接リダイレクトされるようにします。 リーリー Dockerfile の最後の行を に置き換えます。 リーリー
ただし、の場合は、非 root ユーザー
としてタスクを実行します。 「cron -f、cron "フロントエンド" について」も参照してください。「
docker ubuntucron -f
ビルドして実行します: リーリー リーリー
は機能しません
」エリック
がコメントにを追加しました
: 「docker CMD」の最後にある「
tail -f出力 > 表示されない 」を参照してください。
”末尾的
詳細については、
Jason Kulatungaによる「Docker での Cron の実行」 (2021 年 4 月) を参照してください。コメントは次のとおりです-
-
Jason の画像を表示
AnalogJ/docker-cron
に基づく:Dockerfile は、ディストリビューションに応じて、
cronie
/crond
をインストールします。エントリ ポイントの初期化
リーリー/etc/environment
次に呼び出し