世界を動かす技術を、日本語で。

systemdタイマーを愛する

2026年6月2日原文(blog.tjll.net)

概要

  • 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=dailyOnBootSec=1h OnUnitActiveSec=1h
  • 相対時間 は「起動から1時間後、以降は1時間ごと」など、実運用で便利
  • cronのような「毎時○分」よりも、「前回実行から○分後」の方が合理的なケースも多い

タイマーの全体管理

  • systemctl list-timers全タイマーの一覧表示
    • 次回実行時刻、経過時間、関連するserviceなどを一目で把握可能
  • タイマーの 全体像把握 やデバッグに非常に便利
  • --allオプションで非アクティブなタイマーも表示

systemd timerのさらなる利点

  • OnFailure=Restart= など、systemd独自の高度なオプション活用が可能
  • journalctl で実行履歴・エラー確認も容易
  • cron からの移行も段階的に可能で、既存の運用にも馴染みやすい
  • 単一コマンド でタイマー管理・状態確認ができ、保守性向上

systemd timer は、従来のcronの課題を解決しつつ、より柔軟かつ強力なスケジューリングを実現 Linux運用 における新たな標準として、積極的な活用が推奨

Hackerたちの意見

cronieからsystemdタイマーに移行したのは、システムの起動時間に強いからなんだ。バックアップの戦略として、毎日決まった時間にborgアーカイブのエントリーを作成するようにしてる。cronieだと、スケジュールされた時間にシステムが動いてないとダメなんだけど、systemdタイマーはそれを許容して、システムが利用可能になったらすぐにサービスを実行してくれるんだ。ちなみに、これがバックアップ自動化のためのリポジトリだよ: https://github.com/gchamon/borg-automated-backups

cronieには「anacron」っていう仕組みがあって、これがcronによって毎時呼ばれるんだ(俺のシステムでは、/etc/cron.hourly/0anacron)。これによって、最も早いスケジュールが逃した場合でも、/etc/cron.{daily,weekly,monthly}のタスクを実行してくれる(設定可能なランダムな遅延付きで)。/etc/anacrontabを修正すれば、カスタムスケジュールを作成できるよ。ユーザー単位でこれをやるには、ユーザーのcrontabに「@hourly anacron -t /path/to/anacrontab -S /path/to/spooldir」みたいな感じで追加すればいいけど、俺は試したことないんだ。多くのcron実装にも似たような仕組みがあるよ。

ごめん、「tolates」って言葉をググってみたけど、意味がわからない定義が見つからなかった。> システムが利用可能になるとすぐにサービスを実行します。cronには@rebootオプションがあって、いくつかのスクリプトで使ってるけど、すごくうまくいってるよ。

cronieではシステムがスケジュールされた時間に動いてないとダメだけど、systemdタイマーはこれを許容して、システムが利用可能になったらすぐにサービスを実行するよ。Cronieには@rebootメタトリガーがないの?

タイマーは任意の単位で動作できるから、意外と柔軟なんだよね。俺のサーバーには、毎朝ランダムな開始時間で「restic backup」、「restic prune」、「restic forget」のバックアップサイクルを実行するbackup.targetを起動するタイマーがある。実際のrestic-*ユニットはPodman Quadletsだから、サーバーに何があっても、PodmanとSystemdがインストールされてれば動くんだ。ただ、タイマーは定期的に使うにはちょっと扱いづらいシステムdユニットの一つだと思う。分割されてる理由は分かるけど、時々はスクリプトを実行するだけのファイルを作りたいだけなんだよね。

なんでバックアップの時間をランダムにしてるの?

systemdユニットには、上に抽象化のレイヤーが必要な気がする。手動でファイルを編集するのではなく、ツールがやってくれるような、何か宣言的なCLIとか。今のLLMの時代ではあまり関係ないかもしれないけど、毎回ちょっと面倒に感じるんだよね。

Canonのプリンターを使ってるんだけど、しばらく放置すると印刷ノズルが詰まっちゃうかもしれないから、claudeに毎週犬の写真を印刷するsystemdスクリプトを設定してもらったんだ。プリンターにストレスをかけるために、CMYKのスペクトルが十分あることを確認してる。月曜日にデスクに座ってると、突然プリンターから写真が出てくるのはいいサプライズだね :)

プリンターにアルバムやカレンダーからランダムな画像を印刷するモードがあったらいいのに。毎日インクをスポンジに無駄に吸わせるよりはさ。何もなければ、子供の高校の科学フェアのプロジェクトのアイデアになるかもね。

お父さんはDeskjet 720かなんかを持ってたんだけど、彼が亡くなった後、数年間使わずに電源も切ったままだった。カラー印刷が必要になったときに、電源をつないで印刷したら、最初は1/5ページくらいまで色が戻るのに時間がかかったけど、その後は20ページくらい問題なく印刷できたよ。

安いOKIのLEDカラープリンター(C322dnだと思う)を勧めようと思ったんだけど、残念ながら消費者市場から撤退しちゃったんだ :/ 色合いはすごくきれいで均一なんだけど、最大解像度が600dpiしかないのが残念。でも、トナーが乾かないのは、兄貴にとって重要な購入基準だったし、HPのインクジェットは何度も詰まったからね。

レーザープリンターは最高だよ。消耗品のコストだけでも元が取れるからね。

Hacker Newsで議論の続きを見る