ubuntuをヘッドレスで使っている.ネットワークのトラブルが発生・解消しても再接続できないことがあった.
crontabで死活確認を行い,ネットワーク再起動をかける.
ほかにいくつか良い方法があるとは思いますが,今回はこの方法を利用した.
1.NetworkManager を使っているか確認する.
systemctl is-active NetworkManager.service
# → active と返ってくれば稼働中、inactive や failed なら動いていません。
2./usr/local/bin/check_network.sh という名前で以下を保存する.
sudo geditなどでエディターを開く.
/usr/local/bin/check_network.sh
#!/bin/bash
# ———— 設定 ————
# チェック先(Google DNS 等)
TARGET=8.8.8.8
# 再起動コマンド(NetworkManager を使っている場合)
RESTART_CMD="systemctl restart NetworkManager.service"
# ※もし network-manager ではなく /etc/init.d/networking を使うなら:
# RESTART_CMD="/etc/init.d/networking restart"
# ———— 処理 ————
if ! ping -c1 -W2 $TARGET &>/dev/null; then
echo "$(date '+%F %T') ネットワーク未検出 → 再起動実行" >> /var/log/check_network.log
$RESTART_CMD
fi
pingが8.8.8.8に通らず,再起動されたときにログを取ります.
保存後、実行権限を付与:
sudo chmod +x /usr/local/bin/check_network.sh
#確認
ls -la /usr/local/bin/check_network.sh
3.10分ごとに実行する cron ジョブを登録
スクリプト中のsystemctlがsudo権限が必要なので,こちらもsudo.
sudo crontab -e
コマンドラインのnanoエディターなど我慢して使う.OSのクリップボードからペーストできないらしい.
以下の行を追加する.チェックする時間はお好みで.
*/10 * * * * /usr/local/bin/check_network.sh
参考
スクリプトをホームホルダにおいても良いですが,crontab はsudoを使います.