systemdタイマーとは
systemdはLinuxの起動・サービス管理システムですが、タイマー機能を使うことでcronに代わるスケジュール実行が可能です。タイマーは.timerユニットとして定義され、対応する.serviceユニットを指定した時刻や間隔で起動します。
主な特徴
- systemdと統合:サービスと同じ設定ファイル形式で管理できます。
- 高精度:秒単位のスケジュールや起動後の遅延も設定可能です。
- 永続化:システムが再起動しても、失われた実行を自動的に補完できます。
基本的な構成
systemdタイマーは2つのユニットで構成されます。
.timerユニット:実行タイミングを定義。.serviceユニット:実際に実行するコマンドやスクリプトを定義。
例:簡単なタイマーの作成
以下は、毎時0分にメッセージを表示するタイマーとサービスの例です。
[Unit]
Description=毎時メッセージ表示サービス
[Service]
Type=oneshot
ExecStart=/usr/bin/echo "Hello, world!"
[Unit]
Description=毎時メッセージ表示タイマー
Requires=hello.service
[Timer]
OnCalendar=*-*-* *:00:00
Persistent=true
[Install]
WantedBy=timers.target
このファイルをそれぞれ/etc/systemd/system/hello.serviceと/etc/systemd/system/hello.timerに保存し、以下のコマンドで有効化します。
systemctl daemon-reload
systemctl enable --now hello.timer
有効化すると、systemctl list-timersで次回実行時刻を確認できます。
よく使われる設定項目
OnCalendar=:cron形式に近い日時指定。OnActiveSec=:ユニットが有効化された時点からの秒数。OnBootSec=:システム起動後の秒数。Persistent=true:システムが停止していた間に失われた実行を補完。
まとめ
systemdタイマーは、cronに比べて管理が一元化され、systemdの恩恵(ログ統合、依存関係管理、永続化)を活かしたスケジュール実行が可能です。サービスユニットと組み合わせて、サーバーのメンテナンスや定期タスクをシンプルに実装しましょう。