systemd: timerユニットで起動日時制御


前提


ドキュメント


timerユニット: 他のユニットの起動日時を制御するユニット

タイマーの種類

タイマーで使う時間の書式はman systemd.time


単純なタイマー(monotonic timers)

対象のユニットが起動するまでの経過時間や間隔を指定する。

[Unit]
Description=タイマー(ブートして1時間15分後、その後は1か月ごと)

[Timer]
OnBootSec=1hour 15min
OnUnitActiveSec=1month

[Install]
WantedBy=multi-user.target

カレンダー型タイマー(realtime timers)

年月日、曜日、時刻などを指定して、対象のユニットを起動する。

OnCalendar=曜日 年-月-日 時-分-秒

[Unit]
Description=タイマー(13日の金曜日)

[Timer]
OnCalendar=Mon *-*-13
Persistent=true

[Install]
WantedBy=multi-user.target

Persistent=true: やり抜く場合


タイマーの有効化

# my-service.timer
[Install]
WantedBy=multi-user.target

シャットダウン前に停止

精度: AccuracySec=


タイマーのリスト: systemctl list-timers

systemctl list-timers --all
NEXT                        LEFT       LAST                        PASSED   UNIT         ACTIVATES
土 2019-07-06 13:19:24 JST  14s left   土 2019-07-06 13:19:04 JST  5s ago   date.timer   date.service

一時的なタイマー実行: systemd-run

一時的なコマンドやユニットを予定時刻に実行したいとき、タイマー・ユニットファイルを個別に作らず実行できる。

# 例: 20秒後に再起動
systemd-run --on-active=20 --timer-property=AccuracySec=1msec /usr/sbin/reboot
Running timer as unit run-6248.timer.
Will run service as unit run-6248.service.

# 確認
systemctl list-timers
NEXT                        LEFT     LAST  PASSED  UNIT            ACTIVATES
土 2019-07-06 14:09:19 JST  12s left n/a   n/a     run-6248.timer  run-6248.service