LoginSignup
2
3

More than 5 years have passed since last update.

CoreOS dockerコンテナ内のphpを定期実行

Last updated at Posted at 2017-06-23

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

参考リンク

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3