🤔

Dockerで『簡単に』cronの定期実行を行う方法

2024/05/12に公開

概要

今回は使わなかったものの、自身の立ち上げてようとしているサービスで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分毎に実行するように設定していますが、設定を変えればもっと色々なこともできます。詳細はドキュメントを見ていただければと思います。

ドキュメント

https://github.com/willfarrell/docker-crontab

参考になったリンク

Zenn

https://zenn.dev/bz0/scraps/4f1fa3ebcf1bc3

ドキュメント

https://github.com/willfarrell/docker-crontab

Discussion