OnCalendar=dailyのtimerがある。
停止していた時間帯の予定を、次回timer有効化時に補って起動したい。
[Timer]へ追加する適切な設定はどれか。
Persistent=trueはOnCalendarの最終発火時刻を保持し、timerが停止中に逃した予定があれば再有効化時に起動する。
詳細解説
RemainAfterExit=trueRemainAfterExitは主にserviceの終了後状態を扱い、timerの取りこぼしを補完しない。
誤り。RemainAfterExitはserviceのprocess終了後のactive状態を扱い、calendar予定を記録して後から補わない。
Restart=alwaysRestartはserviceの再起動方針で、calendar予定の欠落記録ではない。
誤り。Restart=alwaysはservice process終了後の再起動制御であり、timer停止中の予定時刻を保存しない。
AccuracySec=0AccuracySecはtimer発火時刻の精度幅を調整する。
誤り。AccuracySecは同時期のtimerをまとめる許容精度を調整するが、無効中の発火を復元する機能ではない。
Persistent=truePersistentはtimer停止中に経過したOnCalendar予定を検出し、再有効化時に補完起動できるようにする。
正しい。Persistent=trueはOnCalendar timerの最終発火情報を保持し、停止中に予定を逃した場合は再有効化時に補完起動する。
実際に確かめる
一時的な検証環境で実行できる例です。
printf '%s\n' '[Timer]' 'OnCalendar=daily' 'Persistent=true'期待される結果
[Timer]
OnCalendar=daily
Persistent=true理解のポイント
- calendar timer向け
- 最終発火時刻を保持
- 再有効化時に補完
確認時の注意
- 確認環境: 合成timer unitの内容確認
基礎のおさらい
取りこぼし
常時稼働しない端末ではcalendar eventの時刻に電源が切れていることがあり、Persistentが補完に役立つ。
一度の補完
停止中の各予定をすべて連続再生する設定ではなく、期限を過ぎたeventがあればtimerを起動する仕組みとして理解する。