Я думаю, вам может потребоваться загрузить установочный образ большего размера, он идет с большим количеством вещей, я думаю, я знаю, что это правда в отношении Linux, но не уверен в FreeBSD. Но я не думаю, что это имеет какое-то отношение к Интернету. Я бы сказал что-то не так с экстрактором файлов. Попробуйте получить pkg из портов, если он есть.
Я думаю, проблема связана с вашим оператором if
.
если! ping -q -w 1 -c 1 $ (ip r | grep default | cut -d '' -f 3)
Более конкретно:
ping -q -w 1 -c 1 $ (ip r | grep default | cut -d '' -f 3)
Хост ip
передан неправильно.
Обратите внимание, что каждая часть работает сама по себе (т.е. ping host
и ip r ....
).
Это сработало для меня:
$ ip r | grep "default" | cut -d ' ' -3 | xargs ping -q -w 1 -c 1
Попытайтесь включить это в свои if
операторы.
xargs
берет выходные данные из предыдущих каналов и использует их для ping
, тогда как ранее ip не передавался половине кода ping
. Попробуйте это в командной строке :-)
Изменено на netstat
, а не на ip r
, который также работает с Pi, но является достаточно общим для использования на других дисках Linux.
Сценарий ниже:
Он правильно получает имя хоста для проверки связи и вводит оператор (ы) в случае 0
(ввод, т.е. когда устройство отключено).
Также реструктурирован оператор if
с помощью скобок []
и назначена переменная для оператора очистки.
#!/bin/bash
test_host=`netstat -nr | grep "UG" | awk '{ print $2}' | xargs ping -q -w 1 -c 1 | grep "received" | awk '{ print $4 }'`
if [ "$test_host" == "0" ] || [ -z "$test_host" ] ;
then
echo "service networking restart"
sleep 60
test_host=`netstat -nr | grep "UG" | awk '{ print $2}' | xargs ping -q -w 1 -c 1 | grep "received" | awk '{ print $4 }'`
if [ "$test_host" == "0" ] || [ -z "$test_host" ] ;
then
echo "reboot"
fi
fi