【OpenWrt】Network Service Restart

ラスベリーパイに OpenWrt を導入し旅先でも利用しているが、毎度手動でネットワークサービスを再起動しないといけなかったので、一定の条件に合致したら、自動でネットワークサービスを再起動するようにPythonでコードを書きました。



準備機器

・Raspberry Pi 3 model B:OpenWrt

実装

◇ OpenWrtにPythonをインストール

■ アップデート
opkg update

■ Pythonとpipインストール
opkg install python3 python3-pip


◇ ソースコード(Python)

①  OpenWrtのシステムログに eth0 のリンクダウンがあるかを確認
②-1 ある場合:ネットワークサービスを再起動し、1秒後に再度 ① を実施
②-2 ない場合:ないもせず、1秒後に再度 ① を実施

# Coding: UTF-8

from subprocess import run, Popen
from itertools import repeat
from time import sleep

# Valiables [変数]
default_count = 0
log_message = "Network device 'eth0' link is down"
log_command = "logread | grep -c " + '"' + log_message + '"'
network_command = "service network restart"

for i in repeat(None):
        # Get Ethernet Link Down Message [Ethernet リンクダウンメッセージを取得]
        get_stdout = run(log_command, capture_output=True, text=True, shell=True)
        get_log_count = int(get_stdout.stdout)

        # Network Service Restart [ネットワークサービス再起動]
        if default_count < get_log_count:
                network_restart = Popen(network_command, shell=True)
                while network_restart.poll() is None:
                        pass
                default_count += 1
        else:
                pass

        sleep(1)


◇ OpenWrt を起動時に実行

vim /etc/rc.local

<Before>
exit 0

<After>
python3 /PATH/ファイル名.py &
exit 0

※PATH			:pyファイルを格納している経路を記載
 ファイル名.py	:Pythonで記述されたファイル名を記載


◇ 再起動

reboot