概要
- cron の代替として systemd timer が推奨される理由
- systemd timerの 基本的な使い方 と設定例
- cronとの違い やsystemd timerの利点
- スケジュール表現 と実用的な活用例
- タイマー管理コマンドによる 全体把握 の方法
systemd timerをもっと愛そう
- cron job は長年使われてきたが、2026年現在は systemd timer がより優れた選択肢
- systemd timer は、他のunit(多くは.service)を スケジュール実行 する仕組み
- cronのような表現もサポートし、移行も容易
- systemd timerの主な利点
- $PATHの曖昧さ がなく、実行環境が明確
- 標準出力・標準エラー がsystemd journalに記録され、 履歴追跡 が容易
- スケジュール表現 が人間に分かりやすい
- cronの「01,31 04,05 1-15 1,6 *」のような難解な表現より、systemd timerの方が直感的
systemd timerの基本
- まず、 実行対象のservice unit (例:roulette.service)を作成
- 例:
[Unit] Description=1 in 10 chance to break your chains [Service] ExecStart=/usr/bin/env bash -c '[[ $(($RANDOM % 10)) == 0 ]] && systemctl poweroff || echo LIVE ANOTHER DAY'
- 例:
- 条件付き実行には ExecCondition= を活用
- より明確な意図表現とjournalの記録
- timer unit (例:roulette.timer)を同じファイル名で作成
- 例:
[Unit] Description=impending destruction [Timer] OnCalendar=10:00 [Install] WantedBy=timers.target
- 例:
- timerを start/enable することで、指定時間にserviceが実行される
systemctl start roulette.timerでタイマー起動systemctl enable roulette.timerでブート時に自動起動
systemd timerの特徴とTips
- ExecStart= はシェルコマンドとして直接解釈されないため、 絶対パス指定 や
/usr/bin/envの活用が推奨 - 環境変数 はデフォルトで引き継がれないため、必要に応じて明示的に設定
- [Install]セクション がないとenableできない点に注意
systemctl startで.timerを起動しても、即座に.serviceは実行されない(スケジュール待機状態)
スケジュール表現と応用例
- systemd.time(7) マニュアル参照推奨
- systemd-analyze calendar コマンドでスケジュール表現のバリデーション・解説が可能
- 例:
systemd-analyze calendar '*-*-* *:*:*'
- 例:
- カレンダー式 と 相対時間式 の2種類
- 例:
OnCalendar=dailyやOnBootSec=1h OnUnitActiveSec=1h
- 例:
- 相対時間 は「起動から1時間後、以降は1時間ごと」など、実運用で便利
- cronのような「毎時○分」よりも、「前回実行から○分後」の方が合理的なケースも多い
タイマーの全体管理
systemctl list-timersで 全タイマーの一覧表示- 次回実行時刻、経過時間、関連するserviceなどを一目で把握可能
- タイマーの 全体像把握 やデバッグに非常に便利
--allオプションで非アクティブなタイマーも表示
systemd timerのさらなる利点
- OnFailure= や Restart= など、systemd独自の高度なオプション活用が可能
- journalctl で実行履歴・エラー確認も容易
- cron からの移行も段階的に可能で、既存の運用にも馴染みやすい
- 単一コマンド でタイマー管理・状態確認ができ、保守性向上
systemd timer は、従来のcronの課題を解決しつつ、より柔軟かつ強力なスケジューリングを実現 Linux運用 における新たな標準として、積極的な活用が推奨