Dockerコンテナ内でcronを実行し、crontabを使わずに設定を変更する
Dockerコンテナ内でcron
を実行し。crontab -e
を使用せずに、設定を変更する方法です。
使い方
DockerがインストールされているPC(Linux)で行ってください。
- PCのどこかのディレクトリに https://github.com/syagawa/cron-docker.git をgit cloneします。
- クローンしたディレクトリに行き下記コマンドを実行します。
$ docker compose -f docker-compose-build.yml build
$ chmod +x ./cron/work/script.sh
$ docker compose -f docker-compose.yml up -d
$ docker compose -f docker-compose.yml logs -f
仕組み
- cron/work/list
* * * * * /app/work/script.sh
- cron/work/script.sh
#!/bin/sh
echo Test
cron/work/list
の設定に従い、cron/work/script.sh
が1分ごとに実行され、ターミナルに"Test"と表示されます。
cron/work/list
を書き換えると、1分後にDockerコンテナ内のupdate.sh
内で前のcron/work/list
の内容と比較し異なる場合はdockerのcron設定を変更します。
変更例
ホストマシンでcron/work/list
を以下のように書き換えます。書き換えにはVimなどを使用して下さい。
書き換え前はcron/work/script.sh
が1分ごとに実行されていましたが、書き換え後はcron/work/other1.sh
が1分ごとに実行されるようになります。
また、cron/work/other2.sh
も毎日01:01に実行されるようになります。
なお、書き換え前にother1.sh
とother2.sh
をホストマシン上の cron/work に追加しておいてください。
# 書き換え前 cron/work/list
* * * * * /app/work/script.sh
# 書き換え後 cron/work/list
* * * * * /app/work/other1.sh
1 1 * * * /app/work/other2.sh
注意
なおcronが動くのはDockerコンテナ内となります。ホスト側のスクリプトを叩いたりはできません。