私は毎朝7時にサービスを開始するためにシステムタイマーを試しています。このサービスは、午後10時まで継続的に実行する必要があるアプリケーションを起動します。したがって、アプリケーションがクラッシュした場合、サービスはアプリケーションを再起動する必要があります。 10時にcrontabによってサービスが停止し、システムもシャットダウンします。
OnCalendarとPertant = trueのタイマーを使用しており、タイマーは機能していますが、午前7時以降に電源が切れると(電源が復元された後にBIOSでシステムを再起動する)、タイマーが機能しているためサービスが開始されていることを確認できません。 Triggerの成功は午前7時に起き、翌日まで待たなければなりません..
システムが午前7時前に開始できる場合(夜間停電)、サービスも開始され、午前7時前に開始したくないため、起動時にサービスを実行できません。
どんなアイデアがありますか?
答え1
OnCalendarを介してタイマーが予約されていると仮定すると、欠落しているイベント以降のタイマーの最後の実行状態は何ですか?これは出力の最後の列ですsystemctl list-timers
。
「該当なし」と表示された場合、タイマーは以前にトリガーされたことがないか、最後の実行状態がクリアされたため、起動時には実行されません。
答え2
私が見つけた現在の解決策はthis..deleteです。切手ファイルがにあります~/.local/share/systemd/timers
。その後、タイマーが再起動されます。
[ソース] [1] "各タイマーが最後に実行された時刻を示す長さが0のファイルです。削除すると、次にタイマーが起動したときに再構築されます。"
[1]:https://wiki.archlinux.org/index.php/Systemd/Timers
解決策を見つけたと思いましたが、午前7時以降に電源が切れると機能しないことに気づきました...
答え3
視聴する:
[Timer]
#Execute job if it missed a run due to machine being off
Persistent=true
#Run 120 seconds after boot for the first time
OnBootSec=120