/etc/rc.localのwhile(1)

/etc/rc.localのwhile(1)

私は凹版に書いたwhile true; do ping 10.9.0.1; sleep 1; done/etc/rc.local20分以上待っても、まだログインメッセージを受信できませんでした。起動時に停止するか、起動が非常に遅い(通常はデバイスからログインプロンプトを受信するのに2分未満かかります)。

SDカードをノートパソコンに挿入して削除するとなりましたwhile(1)。ところで、PC/ノートブックでこういうことをすれば、ディストリビューションを再インストールしなくても直すことができるのではないかと思いました。

ベストアンサー1

まず、作成されたとおりにホストが見つからない限り、永久に実行されます。これは、停止するように信号をpingキャッチするまで実行され続けるためです。SIGINT

/etc/rc.local私が覚えている限り、スクリプトはバックグラウンドで実行されません。したがって、無限ループであるため、スクリプトは完了しません。これを行う具体的な理由に応じて、背景に設定したり、条件が満たされたら終了するように変更したりできます。

ネットワークが接続されるまで遅延するためにこれを行う場合は、次のことができます。

while ! ping -c1 10.9.0.1; do
   sleep 1
done

または、バックグラウンドで1秒間に1回pingを実行したい場合、またはをscreen使用してシェルからプロセスを分離し、起動を続行できるようにすることnohupもできます。disown

いずれにしても問題が発生した場合は、起動時にスクリプトを停止する方法がないため、これは潜在的に危険です。

/etc/init.d/操作に時間がかかりすぎる場合は、中断するのに十分なロジックを持つ選択したランレベルに関連付けられているスクリプトを使用する方が良いかもしれません。

おすすめ記事