他のすべての初期化が完了した後にcronを起動する信頼できる方法はsystemdにありますか?

他のすべての初期化が完了した後にcronを起動する信頼できる方法はsystemdにありますか?

私はしばらくcronを使ってきましたが、そのうちのいくつかを理解したようです。欠点そして、これらの問題を解決する方法。それらの一つ欠点はい、cronは起動中に他のサービスの状態を認識しません。つまり@reboot、ジョブに必要なサービスがまだ利用できない場合、cronの機能によってスケジュールされたジョブに問題が発生する可能性があります。呼ぶよ予約された@rebootこと

一つ解決策この問題に対する解決策は、sleepスクリプトが開始される前にコマンドを挿入することです。たとえば、項目@rebootでは次のようになります。crontab

@reboot sleep 15; /path/to/script.sh

AFAIK、これは問題を処理する一般的な方法ですcron @rebootの問題

Systemdはこのツールを置き換え、@reboot初期化/起動中にユーザーに優れた制御を提供すると言います。この改良の「コスト」は、crontab単一行を単位ファイルとシステム学習曲線で置き換えることです。しかし、cronサービス自体はsystemdで始まるので(/lib/systemd/system/cron.service私のRaspberry Piを介して)バスターOS)、cronが削除できるようです。予約された@rebootこと。ちょっとそうです。調整されていないsleepsystemdでは、人々は問題を解決するためにハッキングを続けなければなりません。予約された@rebootこと

私はまだシステム作業中です。功績バッジしかし、cronは次のいずれかでなければならないという概念があります。最後サービスが初期化されました。私がそう言うのは、cronが起動時に最終的なサービスだからです。注文するそれでは、これらすべて依存関係また、満足する必要があり、sleep私のcronタスク@rebootのハッキングを削除することができます。

初期化シーケンスが終了したとき、またはその近くでcronを起動するようにsystemdに指示する方法を理解しようとして、私は次のことを見つけました。cron.service最後のプロセスで回答ガイドラインを開始できます。これをテストするには、以下を使用しますType=idle/lib/systemd/system/cron.service前と後単位ファイルのバージョンはcron.service合理的なアプローチのように見えます。

  1. 走るsystemd-analyze plot > startup_order_noidle.svg
  2. Type=idle追加するcron.service
  3. 再起動
  4. 走るsystemd-analyze plot > startup_order_idle.svg

残念ながら、systemdの下にサービス開始順序をリストすることは、深い運動。iawの使用このsystemd-analyze記事は答えを提供しているようです。しかし、必要に応じて動作しません。cron.service常にリストされているわけではありません。説明します。

これ.SVGファイルサイズが大きいため共有できませんが、リストのどこにも表示されませんstartup_order_noidle.svgcron.serviceバラ油、startup_order_idle.svg したcron.service下の行に表示されますsystemd-logind.service。 IoW、Type=idle追加されていない場合は起動cron.serviceしても表示されません。

到着レビュー:他のすべてのサービス/デバイス/ターゲットなどが開始された後にsystemdでcronを起動する安定した方法はありますか?これを確認するための信頼できる方法はありますか?

ベストアンサー1

通常、単位ファイルには「After =」および「Requires =」フラグを指定する必要があります。通常、サービスをロードする必要がある特定の「要件」があるためです。

このサービスを最後にロードするには、現在設定されている最後のターゲット(multi-user.targetやgraphic.targetなど)の後にロードされる独自のターゲットを作成する方法をお勧めします。 )。

この場合、新しいサービスがインストールされると、通常はマルチユーザーなどの事前設定されたターゲットにデフォルト設定されているため、変更があってもcronサービスは決して最後のサービスになります。

偶然にもつながった質問には、これを行う方法の完全な説明が含まれています。https://superuser.com/a/1543365

起動順序の確認に関しては、次のコマンドを使用できます。

systemctl list-units [-all] [--state=xxx]*

状態:

  • 非アクティブ(オプション)
  • 活性化
  • 失敗

開始されていない(または失敗した)すべてのサービスを印刷/記録するためのcronサービスの事前開始execの一部で、出力が空のactivating場合(またはcronの後に開始する必要があるサービスが含まれている場合)、休憩できます。確かにクローンは実際に最後に始まります。

systemd-analyze plotあなたのユースケースでは信頼できないと主張するので、これは回避策です。

*他の状態も使用できます:active、、、、。簡単な説明は他のソースと一緒にここにあります。deactivatingdeadnot-foundhttps://superuser.com/a/896951

おすすめ記事