cronジョブが別々のプロセス/コンテナで実行されるように、docker swarmで別々のcronジョブコンテナを構成する方法を知りたいです。私はドッカースワームですべてのcronタスクを完了するまで、いくつかの記事で収集した知識のいくつかをまとめたいと思います。可能であれば、コメントに改善を追加するか、自分で編集してください。
これはcronジョブ用のdocker 17.04およびdebian:jessieコンテナを使用してテストされました。
答え1
立てる
ドッカーファイルcron ジョブコンテナの場合は、cron をインストールし、コンテナの起動時に cron サービスを開始し、tail コマンドを使用してコンテナを実行し続けます。
RUN apt-get update && apt-get install -qq -yes cron
CMD service cron start && tail -f /dev/null
働く
docker-compose.yml
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
職業定義
クローンの仕事をすることができます
/var/spool/cron/crontabs/mycrontabこれは cli ツールによって生成されます。$スケジュールされたタスク/別名ユーザーcrontab
/etc/crontabsこれはシステム全体のcrontabコレクションです。
- '* * * * *' root /bin/touch /projectdir/system_crontab_works# 'がない場合
- /etc/cron.daily毎日実行される一般的なbashスクリプトを含むフォルダ。
- /etc/cron.dこれは、次のようなファイルを含むシステム全体のクローン操作を含むフォルダです。/etc/crontabs。ファイルにはダッシュを含めないでください。下線のみを含める必要があります。
- sudo vi /etc/cron.d/system_cron
- '* * * * *' root /bin/touch /projectdir/system_cron.d_works#' がない場合
- sudo chown ルート:root /etc/cron.d/system_cron