スケジュール実行にはCron(anacron)によるもの以外にも、
systemdのTimerユニットを使う方法があります。
本記事では、Timerユニットについて記載しております。
- ■Timerユニットとは?
- ■Timerユニットによるスケジュール一覧
- ■スケジュール一覧の各カラムについて
- ■TimerユニットとServiceユニットの原則1
- ■TimerユニットとServiceユニットの原則2
- ■TimerユニットとServiceユニットの原則3
- ■具体例を見てみる(systemd-tmpfiles-clean.service)
- ■補足: Timerユニットで利用できる設定値のmanページ
本記事は以下の本を参考にしております。
■Timerユニットとは?
・Cronの代わりにスケジュール実行ができます。
・スケジュール実行には2種類あります。
① モノトニックタイマー・・・開始点を動的なものにしたいときに利用
② リアルタイムタイマー・・・カレンダー形式(=Cron同様)を利用したいときに利用
■Timerユニットによるスケジュール一覧
まずは、デフォルトでどのようなTimerが設定されているかを確認してみます。
systemctl list-timers --all --full
内容はともかく、3つ登録されていることが確認できました。
■スケジュール一覧の各カラムについて
systemctl list-timers --all で出力された結果には、以下の列名があります。
① NEXT
⇒ タイマーの次回実行時刻です。
② LEFT
⇒ 次回実行時刻(=NEXT)が実行されるまでの残り時間です。
③ LAST
⇒ 直近で実行されたタイマーの時刻です。
④ PASSED
⇒ 直近で実行されたタイマー時刻からの経過時間です。
⑤ UNIT
⇒ タイマーのUnit名です。
⑥ ACTIVATES
⇒ タイマー実行時に有効になる(=実行される)サービス名です。
■TimerユニットとServiceユニットの原則1
XXXX.timerとXXXX.serviceは対になっており、
どちらのファイルも必要、かつXXXX部分の名称は基本的に揃えます。
※揃えた方が管理面で楽です。
具体的例ですが、上記一覧の3つ目に記載の項目は、
systemd-tmpfiles-clean.serviceとsystemd-tmpfiles-clean.timerとなっており、拡張子前の名称(systemd-tmpfiles-clean部分)は同一です。
こういうものだと思っておいてもらえればと。
■TimerユニットとServiceユニットの原則2
.timerは、.serviceを起動もしくは制御します。
そのため、.serviceには[Install]セクションが存在しません。
※通常の.serviceには[Install]セクションが必須です。例えばNetworkManagerサービスは以下のような設定になっています。
■TimerユニットとServiceユニットの原則3
.timerを使うには、有効化(systemctl enable)および起動(systemctl start)が必要です。
※通常の.serviceと同じです。
■具体例を見てみる(systemd-tmpfiles-clean.service)
systemd-tmpfiles-clean.service(=一覧に表示されたうちの3つ目)について確認してみます。
※3つ目を選んだ理由は説明しやすかっただけです。。。
UNIT列とACTIVATES列に記載の .timer , .serviceの詳細は以下の通りです。
① /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
大事なのは15行目以降です。[Timer]セクションで起動条件を記載します。
16行目で「起動15分後に実行」を定義しています。
17行目で「実行周期(ここでは1日)」を定義しています。
※ちなみに、この設定は「モノトニックタイマー」です。
② /usr/lib/systemd/system/systemd-tmpfiles-clean.service
上記①のsystemd-tmpfiles-clean.timerが起動した際に実行されるサービスです。
設定内容は普通の.serviceユニットと基本的には同じですが、前述したように[Install]セクションはありません。
纏めると、
「.timerで実行タイミングを定義し、定義したタイミングで.serviceが起動する」
と言えます。
■補足: Timerユニットで利用できる設定値のmanページ
man 7 systemd.time
以上です。
本記事は以下の本を参考にしております。