systemd-anacronの動作を模倣するタイマーユニット


13

頻繁にオフになるマシン用のタイマーユニットを作成する必要があります(たとえば、従来のデスクトップセットアップ)。このタイマーユニットは定期的にアクティブにする必要がありますが、それほど頻繁ではありません(毎週、毎月など)。

私はいくつかのアプローチを見つけましたが、それらはすべて実際には適合しません:

  • manページによるのみOnBootSecOnStartupSec時間の設定された時点が過去にある場合のディレクティブが有効になります。これらの組み合わせOnActiveSecを使用して定期的なイベントを定義するいくつかの例も見つけました。問題は、マシンが起動されるたびに、タイマーが設定されたユニットをアクティブにすることです。週/月に一度だけ実行するタイマーを取得した場合、それはあまりにも頻繁です。例:ログを1日に3回ローテーションさせたくない...

  • OnCalendarディレクティブを使用したソリューション。設定された時点でマシンの電源がオフになっている場合(時間指定で時間を省略した場合のデフォルトは00:00:00であるため、ほとんど真夜中です)、タイマーは次回の起動後にアクティブになりません。少なくとも私はそれを手に入れました。そうですか?

質問は次のとおり
です。設定された時間が過去の場合、次回の起動直後にカレンダーイベントのタイマーがアクティブになりますか?
そうでない場合:そのような動作を得るための回避策はありますか?


わかりました、私はこれを知っています。それはまだ進むべき道ですか?または、よりエレガントなソリューションがありますか?現在の状況を改善する予定はありますか?
mmh

回答:


15

この機能は、ディレクティブを使用してsystemd(ver> = 212)に既に実装されているPersistent=ため、ディレクティブPersistent=trueを使用しOnCalendar=てジョブを実行する日付/時刻を確立するときにユニットファイルに挿入するだけです。

永続的=

ブール引数を取ります。trueの場合、サービスユニットが最後にトリガーされた時間がディスクに保存されます。タイマーがアクティブになったときに、タイマーが非アクティブだった時間中に少なくとも1回トリガーされていた場合、サービスユニットはすぐにトリガーされます。これは、マシンがオフのときに、実行されなかったサービスの実行に追いつくのに役立ちます。この設定は、OnCalendar =で設定されたタイマーにのみ影響することに注意してください。


反対ではないですか?OPはとの両方OnBootSecを持っていることから生じる余分な実行を排除するように求めOnActiveSecます。Persistentダウンのために少なくとも1つの実行が失敗した場合、ブート時に1回実行するのですか?
x-yuri

まあ、あなたはおそらくこのようにそれを意味しました
x-yuri

0

systemd-develメーリングリストのこの電子メールによると、望ましい動作はロードマップ上にあり、今後追加される予定です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.