Tôi nghĩ rằng giải pháp hololeap đang hoạt động.
Giải pháp của tôi kiểm tra mỗi N phút (tùy thuộc vào cách bạn định cấu hình crontab) cho kết nối mạng hoạt động. Nếu kiểm tra thất bại tôi theo dõi các thất bại. Khi số lần thất bại> 5 Tôi cố gắng khởi động lại wifi (bạn cũng có thể khởi động lại Raspberry nếu khởi động lại wifi thất bại, kiểm tra các bình luận).
Đây là repo GitHub luôn chứa phiên bản mới nhất của tập lệnh:
https://github.com/ltpitt/bash-network-repair-automation
Đây là, theo chính sách chung của stackexchange (tất cả các câu trả lời không nên chỉ chứa các liên kết), cũng như tệp network_check.sh, sao chép và dán nó vào bất kỳ thư mục nào bạn thích, hướng dẫn cài đặt đều nằm trong phần bình luận của tập lệnh.
#!/bin/bash
# Author:
# twitter.com/pitto
#
# HOW TO INSTALL:
#
# 1) Install ifupdown and fping with the following command:
# sudo apt-get install ifupdown fping
#
# 2) Then install this script into a folder and add to your crontab -e this row:
# */5 * * * * /yourhome/yourname/network_check.sh
#
# Note:
# If you want to perform automatic repair fsck at reboot
# remember to uncomment fsck autorepair here: nano /etc/default/rcS
# Let's clear the screen
clear
# Write here the gateway you want to check to declare network working or not
gateway_ip='www.google.com'
# Here we initialize the check counter to zero
network_check_tries=0
# Here we specify the maximum number of failed checks
network_check_threshold=5
# This function will be called when network_check_tries is equal or greather than network_check_threshold
function restart_wlan0 {
# If network test failed more than $network_check_threshold
echo "Network was not working for the previous $network_check_tries checks."
# We restart wlan0
echo "Restarting wlan0"
/sbin/ifdown 'wlan0'
sleep 5
/sbin/ifup --force 'wlan0'
sleep 60
# If network is still down after recovery and you want to force a reboot simply uncomment following 4 rows
#host_status=$(fping $gateway_ip)
#if [[ $host_status != *"alive"* ]]; then
# reboot
#fi
}
# This loop will run network_check_tries times and if we have network_check_threshold failures
# we declare network as not working and we restart wlan0
while [ $network_check_tries -lt $network_check_threshold ]; do
# We check if ping to gateway is working and perform the ok / ko actions
host_status=$(fping $gateway_ip)
# Increase network_check_tries by 1 unit
network_check_tries=$[$network_check_tries+1]
# If network is working
if [[ $host_status == *"alive"* ]]; then
# We print positive feedback and quit
echo "Network is working correctly" && exit 0
else
# If network is down print negative feedback and continue
echo "Network is down, failed check number $network_check_tries of $network_check_threshold"
fi
# If we hit the threshold we restart wlan0
if [ $network_check_tries -ge $network_check_threshold ]; then
restart_wlan0
fi
# Let's wait a bit between every check
sleep 5 # Increase this value if you prefer longer time delta between checks
done
chỉnh sửa 1/26/2018: Tôi đã xóa các tệp tạm thời để cho phép tập lệnh chạy trong bộ nhớ và tránh ghi vào thẻ SD của Raspberry.