私はしばらく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
こと。ちょっとそうです。調整されていないsleep
systemdでは、人々は問題を解決するためにハッキングを続けなければなりません。予約された@reboot
こと。
私はまだシステム作業中です。功績バッジしかし、cronは次のいずれかでなければならないという概念があります。最後サービスが初期化されました。私がそう言うのは、cronが起動時に最終的なサービスだからです。注文する、それでは、これらすべて依存関係また、満足する必要があり、sleep
私のcronタスク@reboot
のハッキングを削除することができます。
初期化シーケンスが終了したとき、またはその近くでcronを起動するようにsystemdに指示する方法を理解しようとして、私は次のことを見つけました。cron.service
最後のプロセスで回答ガイドラインを開始できます。これをテストするには、以下を使用しますType=idle
。/lib/systemd/system/cron.service
前と後単位ファイルのバージョンはcron.service
合理的なアプローチのように見えます。
- 走る
systemd-analyze plot > startup_order_noidle.svg
Type=idle
追加するcron.service
- 再起動
- 走る
systemd-analyze plot > startup_order_idle.svg
残念ながら、systemdの下にサービス開始順序をリストすることは、深い運動。iawの使用このsystemd-analyze
記事は答えを提供しているようです。しかし、必要に応じて動作しません。cron.service
常にリストされているわけではありません。説明します。
これ.SVGファイルサイズが大きいため共有できませんが、リストのどこにも表示されませんstartup_order_noidle.svg
。cron.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
、、、、。簡単な説明は他のソースと一緒にここにあります。deactivating
dead
not-found
https://superuser.com/a/896951