ntp
(リンクだけでなく)実際のインターネット接続がある場合にのみサービスを開始するだけです。条件が満たされない場合(通常はネットワークデバイスが利用可能になるまで)、いくつかの起動スクリプトが遅れることがわかったようです。
起動スクリプトでこれを正しく実行するにはどうすればよいですか?
- 起動スクリプトがチェックを実行します(他のスクリプト)。
- 結果に応じて、実際にサービスを開始するか、しばらく遅延してから再スキャンを実行します。
Bash条件を想像できますが、while
バックグラウンドに入る前にスクリプトがブロックされ、起動メカニズムと環境に組み込まれたソリューションがないことを確認したいと思います。
注:これはフォローアップです。起動スクリプトの依存関係に関する前の質問。
答え1
起動時にスクリプトを起動してネットワークが表示されるのを待つことは、必要なタスク、つまりネットワークが表示されたときに何かを実行する奇妙で複雑な方法です。
ネットワーク起動時に操作を実行するには、システム起動スクリプトではなくネットワーク起動スクリプトに追加してください。 SystemdとUpstartはそれらを統合しますが、Debian wheezyは起動(および実行レベルの変更)のみを管理する従来のinitシステムを使用しています。
Debianとその派生製品で実行するスクリプトを配置できます。インターフェイスが表示されたら存在する/etc/network/if-up.d/
。
ネットワーク接続の代わりにインターネット接続を監視する必要がある場合は、次のことを行う必要があります。
- ネットワーク接続定義を選択します。インターネットは一元化されていません。特定のホストが特定の要求に応答するかどうかだけを確認できます。これはファイアウォールの影響を受ける可能性があります。
- 対応する前に、ネットワークがどれだけ長くダウンできるかを決定してください。それはあなたが達成したいものに依存します。短すぎる時間間隔を選択すると、単純なパケット損失が原因でネットワークがダウンしていると誤って考えられる可能性があります。間隔が長すぎると、失敗した接続をすばやく検出できません。
これを達成できる魔法のような方法はありません。最も明確な方法は、接触試行の間に(2.)のために選択された時間休止するループで(1.)のために選択されたサーバーに接続することです。これは、接続の開始時期を検出する唯一の方法です。 TCP接続を開いたり、頻繁に開いている接続からパケットを送信するなど、接続損失を観察する別の方法があります。
3つの可能な方法があります。
- 定期的に接続をテストし、状態をファイルに保存し、状態が変わったときに反応するcrontabを配置します。
- シェル(または他の)スクリプトを永久に実行し、接続テストを永久に繰り返すようにしてください。
- より高度な機能を使用してくださいモニタリングツール。