別のプロセス/コンテナで cron ジョブを実行するために、docker swarm で別の cron ジョブ コンテナを構成する方法を知りたいと思いました。docker swarm ですべての cron ジョブが機能するまで、いくつかの投稿から収集した知識をまとめたいと思います。コメントに改善点を追加するか、可能であれば直接編集してください。
これは、docker 17.04 と cron ジョブ用の debian:jessie コンテナを使用してテストされました。
答え1
建てる
Dockerファイルcronジョブコンテナの場合、cronをインストールし、コンテナの起動時にcronサービスを開始し、その後tailコマンドでコンテナを実行し続ける
RUN apt-get update && apt-get install -qq -yes cron
CMD service cron start && tail -f /dev/null
構成
ドッカー
services:
cron:
image: debian:jessie
volumes:
- mycronjobs:/etc/cron.d
ジョブファイル
プロジェクトのルート パスに cron ジョブを含むフォルダーを作成します (ファイル名の特殊文字にはアンダースコアのみを使用します)
me@machine:/projectdir$ ls -al
-rw-rw-r-- 1 me me 978 Apr 26 17:49 docker-compose.yml
-rw-rw-r-- 1 me me 1052 Apr 26 18:06 Dockerfile
drwxrwxr-x 6 me me 4096 Apr 26 16:57 mycronjobs
me@machine:/projectdir$ ls -al mycronjobs
-rw-rw-r-- 1 me me 978 Apr 26 17:49 job-dash-bad
-rw-rw-r-- 1 me me 1052 Apr 26 18:06 job_underscore_good
-rw-rw-r-- 1 me me 1052 Apr 26 18:06 check_running
仕事の定義
cronジョブを
/var/spool/cron/crontabs/mycrontabCLIツールで作成される$ クローンタブ/ 別名ユーザーcrontab
/etc/crontabsこれはシステム全体のcrontabのコレクションです
- '* * * * *' root /bin/touch /projectdir/system_crontab_works # 'sなし
- 毎日毎日実行されるプレーンなbashスクリプトを含むフォルダです
- /etc/cron.dこれは、次のようなファイルでシステム全体のcronジョブを含むフォルダです。/etc/crontabsファイルにはダッシュは使用できず、アンダースコアのみ使用できます。
- sudo vi /etc/cron.d/system_cron
- '* * * * *' root /bin/touch /projectdir/system_cron.d_works # 'sなし
- sudo chown root:root /etc/cron.d/system_cron