system timer:systemd内に含まれる自動実行

system timer

Linuxにおける現代的な自動実行:systemd timer の概要と基本的な使い方

Linux環境での自動実行といえば、長年 cron(crond) が利用されてきました。 しかし現在の多くのディストリビューションでは、initシステムとして systemd が採用されており、 その中に組み込まれているのが systemd timer です。

systemd timer は、従来の cron と同様に 「指定した時間にコマンドやサービスを実行する」ための仕組みですが、 systemd と統合されている点が大きな特徴です。

本記事では、systemd timer の基本概念と、 簡単な設定方法・基本コマンドについて解説します。

systemd timer とは何か

systemd timer は、systemd のユニット機能の一つです。 タイマー専用の .timer ユニット と、 実際に実行される .service ユニット を組み合わせて動作します。

cron が「crontab という1つのファイルで管理」するのに対し、 systemd timer はユニット単位で管理されます。

そのため、

  • systemctl で状態確認ができる
  • journalctl でログを確認できる
  • 依存関係を設定できる
  • サービス単位で管理できる

といった、systemd のメリットをそのまま活用できます。

cronとの違い

  • cron: シンプルで軽量、古くから使われている
  • systemd timer: systemdと統合、ログ管理・依存制御が強力

単純な定期実行であれば cron でも十分ですが、 「サービスとして管理したい」「ログをsystemdで一元管理したい」 という場合には systemd timer が適しています。

基本構成

systemd timer を利用するには、通常以下の2つのファイルを作成します。

  • example.service
  • example.timer

簡単な例:毎日3時にスクリプトを実行する

1. serviceユニットの作成

まず、実行内容を定義する service ファイルを作成します。

# vi  /etc/systemd/system/backup.service

[Unit]
Description=Daily Backup Service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

2. timerユニットの作成

# vi  /etc/systemd/system/backup.timer

[Unit]
Description=Run Daily Backup at 3AM

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target

OnCalendar は実行時刻を指定します。 cronのような書式ではなく、日時形式で記述します。

Persistent=true を指定すると、 サーバー停止中に実行できなかったジョブを 起動時に補完実行します。

3. 有効化と起動

# systemctl daemon-reload
# systemctl enable backup.timer
# systemctl start backup.timer

4. 状態確認

$ systemctl list-timers

登録されているタイマー一覧が表示されます。

5. ログ確認

$ journalctl -u backup.service

実行結果のログを確認できます。

OnCalendarの指定例

  • 毎日3時:OnCalendar=*-*-* 03:00:00
  • 毎週月曜3時:OnCalendar=Mon *-*-* 03:00:00
  • 毎月1日0時:OnCalendar=*-*-01 00:00:00

また、相対時間指定も可能です。

OnBootSec=5min
OnUnitActiveSec=1h

これにより、 「起動から5分後に実行」 「前回実行から1時間後に再実行」 といった指定が可能になります。

systemd timer のメリット

  • systemctlで一元管理可能
  • journalctlでログ確認可能
  • 依存関係制御が可能
  • サービスとして管理できる
  • 実行漏れの補完(Persistent)が可能

systemd timer の注意点

  • 設定ファイルがやや複雑
  • cronに比べて記法が直感的ではない
  • systemd環境でのみ利用可能

小規模サーバーで単純な処理だけなら cron でも十分ですが、 systemd 環境では timer の方が統合管理しやすい場合が多いです。

まとめ

systemd timer は、systemd と統合された現代的な自動実行機能です。

cron と同様に定期実行が可能でありながら、 ログ管理・依存制御・補完実行など、 より高度な機能を備えています。

小規模サーバーでは cron と比較検討し、 systemdベースの運用を行っている環境では 積極的に活用する価値があります。

Linuxの自動実行基盤として、 cron・at・systemd timer を適切に使い分けることが、 安定運用の鍵となります。