私は最近、Linux 2.6を実行しているARMマシンでinitシステムをsysvinitからrunitに切り替えることで大きな成功を収めました。しかし、初期化ルーチンを微調整しようとしています。私は「oneshot」システムサービスに似たものが欲しいです。
初期化ルーチンの一部は、ディスクをフォーマットしてからマウントする必要があることです。 runitサービスの1つは、インストールされているこのディスクによって異なります。ただし、残りのサービス(sshdなど)はそうではありません。したがって、システムの残りの部分が初期化されている間にバックグラウンドでディスクフォーマットプロセスを開始できればよいでしょう。ディスクフォーマットは非常に遅いため、バックグラウンドで実行できる場合は、ブート時間全体に大きな影響を与える可能性があります。
まだフォーマットされていない場合は、ディスクを安定してフォーマットするディスクフォーマットスクリプトがあります/usr/local/bin/format_disk.sh
(すでにフォーマットされている場合は何もしません)。現在検討中のオプションは次のとおりです。
- 手動実行
sudo /usr/local/bin/format_disk.sh
:今やっていることですが、ユーザーの介入なしにシステムを完全に初期化できるようにプロセスを自動化したいと思います。 /usr/local/bin/format_disk.sh
スクリプト内で実行/etc/runit/1
:ディスクがフォーマットされるまでサービスが開始されないため、理想的ではありません。- 実行されたら、終了/ループ/などを実行する runit サービスを作成します
/usr/local/bin/format_disk.sh
。これは実際にはデーモンではなく、システムの稼働中に実行する必要があるため、理想的ではありません。たぶん私はsv stop
自分で実行させることができますか?
で同様のことができればと/usr/local/bin/format_disk.sh &
思いますが/etc/runit/1
、終了する前にrunitがまだサービスを開始していないようですformat_disk.sh
。この疑いは正しいですか?/etc/runit/1
サービスを開始できるようにバックグラウンドプロセスを開始する他の方法はありますか?
runit システムのバックグラウンドで初期化ステップを実行する最良の方法は何ですか?
答え1
2つのオプション:
- 依存サービスの実行スクリプトからこのスクリプトを呼び出します。これにより、サービスが実行される前にスクリプトが返されます。
- バックグラウンドでスクリプトを実行し
/etc/rc.local
、完了したらスクリプトにtmpfsファイルをタッチさせます。次に、依存サービスの実行スクリプトにファイルが存在することを確認します。