2026年5月31日

2026年5月31日

Dockerコンテナのスケジュール実行(cron)方法

はじめに

Dockerは、アプリケーションとその依存関係を一括で提供するための軽量な仮想化技術です。しかし、Dockerコンテナ内で定期的なタスク(例えば、データバックアップやログの定期的なクリーニング)を行うには、cronの設定が必要となります。この記事では、Dockerコンテナ内でcronを使用してスケジュールされたタスクを実行する方法について解説します。

症状・背景

  • Dockerコンテナ内で定期的に実行されるタスク(例えば、バックアップやログクリーニング)が必要な場合
  • 毎日特定の時間にタスクを実行したいが、Dockerの起動時にcronプロセスを開始しない設定になっている
  • 既存のDockerコンテナにcronを使用して定期的なタスクを追加したい

手順・設定方法

ステップ1: cronファイルを作成する

# Dockerコンテナ内で使用されるcronジョブは、/etc/cron.dディレクトリに配置します。
# まず、このディレクトリが存在しない場合は作成します。

mkdir -p /etc/cron.d

ステップ2: cronファイルを編集する

# 例として、毎日午前1時にタスクを実行したい場合のcronジョブを作成します。
echo "0 1 * * * root /usr/local/bin/my_backup_script.sh" > /etc/cron.d/backup

ステップ3: cronサービスを起動する

# Dockerコンテナ内でcronサービスを開始します。具体的な方法は、Dockerイメージによって異なります。
# Alpine Linuxの場合、crondを使用します。

apk add crond
service crond start

ステップ4: プロセスの継続的な実行

# Dockerコンテナが再起動された際にcronプロセスを保持するためには、initシステムが必要です。
# Alpine Linuxの場合、systemdを使用します。

apk add busybox-sysvinit
rc-update add crond default

ステップ5: 実践/トラブルシュート/監視

# Dockerコンテナのログからcronジョブの実行状況を確認できます。
docker logs <container_name>

注意事項

  • cronファイルは所有者(root)によって読み取り、書き込み、実行可能にする必要があります。
  • cronジョブが正しく実行されない場合、ログファイルやシステムログに原因を探る情報があります。
  • Dockerコンテナの再起動時にcronプロセスが失われるため、initシステムを使用することで問題を解決します。

まとめ

1. cronファイル作成: /etc/cron.dディレクトリにcronジョブを配置します。

2. cronサービス開始: crondをインストールし、サービスを開始します。

3. initシステムの使用: cronプロセスが再起動時に失われないよう、busybox-sysvinitを使用してinitシステムを設定します。

4. ログ監視: Dockerコンテナのログからcronジョブの実行状況を確認します。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ