【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