🤔
Dockerで『簡単に』cronの定期実行を行う方法
概要
今回は使わなかったものの、自身の立ち上げてようとしているサービスでDockerのcronを定期実行する方法を試したので備忘録としてまとめてみようと思います。
※また、全体的に他のサイトはわかりずらかったのもまとめてみた理由の一つです💦
ファイル構成
docker
│ └── cron
│ ├── config.json
│ ├── Dockerfile
│ ├── backup.sh
│
├── buckup
└── docker-compose.yml
ファイルの内容
docker-compose.yml
version: '3.8'
services:
cron:
container_name: 'cron'
build:
context: .
dockerfile: ./docker/cron/Dockerfile
# platform: linux/amd64 # 必要に応じて
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./docker/cron/config.json:/opt/crontab/config.json
- ./backup:/backup
# environment:
# PASSWORD: "${PASSWORD}"
config.json
[
{
"schedule":"@every 1m",
"command":"echo 'test1111' >> /backup/test.log"
},
{
"comment": "1分毎 ログ出力",
"schedule": "@every 1m",
"command": "/scripts/backup.sh"
}
]
Dockerfile
FROM willfarrell/crontab:latest
# Copy the backup script and config file into the container
COPY ./docker/cron/backup.sh /scripts/
COPY ./docker/cron/config.json /opt/crontab
# # Grant execution permissions
RUN chmod +x /scripts/backup.sh
backup.sh
#!/bin/bash
# Set variables
# PASSWORD="${PASSWORD}"
# cron execute
echo 'test2222' >> /backup/test.log
結果
buckup
フォルダのtest.log
ファイルに対して1分毎に
test.log
test1111
test2222
が出力されます。
cronの詳細設定
現状、config.json
にて1分毎に実行するように設定していますが、設定を変えればもっと色々なこともできます。詳細はドキュメントを見ていただければと思います。
ドキュメント
参考になったリンク
Zenn
ドキュメント
Discussion