CoreOS dockerコンテナ内のphpを定期実行
CoreOSにてコンテナ内のPHPをcronのように実行させたい時の手順メモ。
概要
CoreOSではsystemdのtimerユニットで実行します。
大まかな流れの手順は下記の記事を参考にさせていただきました。
systemdでの定期実行(timerユニット)
ユニットの記述
各ユニットは以下のように記述しました。
- 実行用ユニット
/etc/systemd/system/test.service
[Unit]
Description=test process
[Service]
Type=simple
TimeoutStartSec=0
ExecStart=/usr/bin/docker exec test_container php /var/www/html/test.php
[Install]
WantedBy=default.target
Docker systemd からの起動に少しヒントがありまして、
Type=simple は、デーモンとして実行するのではなく、終了待ちで生存監視をする。
そのため ExecStart? では "-d" (バックグラウンド起動) でコンテナを起動しない。
TimeoutStartSec?=0 として、起動までの待ち時間を無制限にしている (デフォルトは 90秒)。
とあるので、バックグラウンド起動せず、待ち時間無制限で指定します。
- タイマー設定用ユニット
/etc/systemd/system/test.timer
[Unit]
Description=test process Timer
[Timer]
OnCalendar=*-*-* 02:00:00
Unit=test.service
[Install]
WantedBy=timers.target
こちらはいたって通常通りの指定方法でOKです。
(上記の例では毎日2:00に実行しています)
起動設定
systemctlに変更を通知 → タイマー有効化 → タイマー起動
sudo systemctl daemon-reload
sudo systemctl enable test.timer
sudo systemctl start test.timer