知っておくとちょっと便利!systemd.timer によるタスク管理2

今号では、systemd.timer で設定可能なパラメータや、実現可能な設定方法について、もう少し深堀りして説明します!

独自の timer (タイマー)を設定する

前回の記事では、デフォルトで使用されている .timer の内容から、どのような設定があるのかを確認しました。
今回は、実際に systemd.timer の設定を自分で追加する手順を説明します。
例として、一定の間隔でログに文字を出力するスクリプトを呼び出すタスクを設定してみます。

.service および .timer ファイルを作成する

下記の様な service および timer ファイルを作成します。

/etc/systemd/system/test.service

[Unit]
Description=test script

[Service]
Type=oneshot
ExecStart=/work/test.sh
  • Description=test script
    このサービスファイルの概要
  • Type=oneshot
    サービスが 1回だけ実行されることを示す (実行タイミングが来るごとに 1回)
  • ExecStart=/work/test.sh
    実行するコマンドを指定

/etc/systemd/system/test.timer

[Unit]
Description=Run test script

[Timer]
OnCalendar=minutely

[Install]
WantedBy=timers.target
  • Description
    このタイマーファイルの概要
  • OnCalendar=minutely
    タスク (test.service) が実行される頻度
    minutely は毎分を表す
  • WantedBy=timers.target
    サービスがどのタイミングで有効化されるか

なお、test.service に記載のある /work/test.sh ファイルの内容は下記の通りとなっています。

/work/test.sh

#!/bin/bash
echo "$(date) testlog" >> /work/test.log

タイマーを起動

service ファイルと timer ファイルを追加したため、daemon-reload を実行した後に systemctl で test.timer を起動します。

# systemctl daemon-reload
# systemctl start test.timer

なお、起動に成功しタイマーが設定されると、下記のコマンドで現在エントリされているタイマーの一覧を確認することができます。

# systemctl list-timers

結果を確認

タイマーの設定どおりにタスクが実行されているか、実際のログから確認してみます。

# cat /work/test.log
Fri Aug  1 12:46:04 AM UTC 2025 testlog
Fri Aug  1 12:47:04 AM UTC 2025 testlog
Fri Aug  1 12:48:04 AM UTC 2025 testlog
Fri Aug  1 12:49:04 AM UTC 2025 testlog
#

ちゃんと毎分(1分ごとに)ログが書き込まれていることが確認できました。

タスクの実行頻度を設定するための tips

timer ファイルの [timer] 項で設定できるディレクティブの一部を紹介します。

  • OnCalendar
    最も一般的な設定方法で、特定の日時、定期的なタイミング (毎日、毎分など) を指定します。
    ■ 例1:OnCalendar=daily (毎日)
    ■ 例2:OnCalendar=Sat,Sun 09:00 (毎週土日の午前 9時)
    ■ 例3:OnCalendar=*-*-* 09:00:00 (毎日午前 9時)
    なお、例3 のように特定の時刻は YYYY-MM-DD HH:MM:SS 形式で指定できます。
    * はすべての時刻を表します。
  • OnActiveSec
    タイマーが有効化されてからの時間を指定します。
    具体的には、対象の .timer ユニットが active になってからの時間になります。
    ■ 例:OnActiveSec=15min (タイマーが有効化されてから 15分後)
  • OnBootSec
    システムが起動してからの秒数を指定します。
    具体的には、systemd が boot.target に到達してからの時間になります。
    ■ 例:OnBootSec=15min (システムが起動されてから 15分後)

なお、systemd では時間に関するディレクティブで下記の単位を使用できるようになっています。
OnActiveSec や OnBootSec、その他のディレクティブにも下記の単位が使用できます。

  • s, sec, second (秒)
  • min, minute (分)
  • h, hr, hour (時間)
  • d, day (日)
  • w, week (週)
  • m, month (月)
  • y, year (年)

また、今回紹介しきれなかったディレクティブが他にもいくつかありますので、詳しい内容を知りたい方は man systemd.timer にて systemd.timer のマニュアルを確認してみてください。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です