/

Dockerコンテナ内でcronを実行し、crontabを使わずに設定を変更する

script.shが実行されている
script.shが実行されている

Dockerコンテナ内でcronを実行し。crontab -eを使用せずに、設定を変更する方法です。

使い方

DockerがインストールされているPC(Linux)で行ってください。

  1. PCのどこかのディレクトリに https://github.com/syagawa/cron-docker.git をgit cloneします。
  2. クローンしたディレクトリに行き下記コマンドを実行します。
$ 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.shother2.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コンテナ内となります。ホスト側のスクリプトを叩いたりはできません。