ラズパイのネットワーク接続監視とリブート設定
既報:Raspberry pi サーバの起動時にIPアドレス取得で検討したが、あきらめた A仕様:「ルータが再起動したら、ラズパイがIPアドレスを読み取り、DynamoDBに保管する」案の代替策を思いついたので、記録しておきます。
Q: ネットワーク接続が切れたらラズパイをリブートできますか?
実現方法
- ネットワーク接続を監視するPythonスクリプトを作成します。
- スクリプトに実行権限を付与します。
- cronジョブにスクリプトの定期実行を登録します。
- リブート時にIPアドレスを報告するcronジョブを確認します。
Pythonスクリプト例
#!/usr/bin/env python3
import subprocess
import time
import os
def is_network_available():
"""ネットワーク接続を確認する関数"""
try:
subprocess.check_call(['ping', '-c', '1', '8.8.8.8'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
return True
except subprocess.CalledProcessError:
return False
def reboot_if_network_down():
"""ネットワーク接続が切れた場合にリブートする関数"""
if not is_network_available():
print("ネットワーク接続が切断されました。システムをリブートします。")
os.system("sudo reboot")
else:
print("ネットワーク接続は正常です。")
if __name__ == "__main__":
while True:
reboot_if_network_down()
time.sleep(60) # 1分ごとに確認
補足
- pingコマンドの宛先は必要に応じて変更してください。
- time.sleep()の間隔は確認頻度に合わせて調整してください。
- check_network.logに実行結果が記録されます。
- セキュリティ上の理由から、sudo rebootをcronジョブで実行する場合は注意が必要です。
Q: pingコマンドの宛先はなぜ変更する必要があるのですか?
pingコマンドの宛先を変更することで、ネットワーク接続の確認精度や対象を調整できます。
宛先変更の理由
- 信頼性: より安定した宛先や複数の宛先で確認できます。
- ネットワーク環境: ファイアウォールなどで特定の宛先へのpingが制限されている場合があります。
- 目的: インターネット接続だけでなく、特定のサーバーやデバイスへの接続も確認できます。
宛先の例
- 一般的なインターネット接続確認: 8.8.8.8 (Google Public DNS), 1.1.1.1 (Cloudflare DNS)
- ローカルネットワーク確認: ルーターのIPアドレス, ローカルネットワーク内の他のデバイス
- 特定のサーバー確認: 社内サーバー, 特定のWebサービス
変更方法
Pythonスクリプト内のsubprocess.check_call(['ping', '-c', '1', '8.8.8.8'], ...)
の行で、8.8.8.8
を別のIPアドレスまたはホスト名に置き換えます。