Я думаю, проблема связана с вашим оператором 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
Когда я искал эту ошибку в Google. Это дало мне два варианта:
а) вспышка с последним изображением b) Замените скрипт LED_IGNAING.SH со скриптом, приведенным в GoogleGroups и блогах.
Итак, я попробовал 2-й вариант сначала и сработал. Я понятия не имею, какова цель LED_IGNING.SH
Актуальный LED_IGN.SH IS:
> #!/bin/sh
> # tary, 16:46 2013-4-22
>
> x=$(/bin/ps -ef | /bin/grep "[l]ed_acc") if [ ! -n "$x" -a -x
> /usr/bin/led_acc ]; then /usr/bin/led_acc & fi
Новый LED_IGN.SH:
> #!/bin/sh -e
> ### BEGIN INIT INFO
> # Provides: led_aging.sh
> # Required-Start: $local_fs
> # Required-Stop: $local_fs
> # Default-Start: 2 3 4 5
> # Default-Stop: 0 1 6
> # Short-Description: Start LED aging
> # Description: Starts LED aging (whatever that is)
> ### END INIT INFO
> x=$(/bin/ps -ef | /bin/grep "[l]ed_acc") if [ ! -n "$x" -a -x
> /usr/bin/led_acc ]; then /usr/bin/led_acc & fi
Ваша проблема с совершенно другим файлом. Он назван во многих сообщениях ошибок, которые прямо перед вами: LED_IGN.SH
.
У него нет правильных заголовков LSB. Несколько человек на www предоставили версии, которые имеют:
попробуйте это
До :::::::::::::::::::
#!/bin/bash
### BEGIN INIT INFO
# Provides: GatewayStart.sh
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
:::::::::::::::::::::::::
After########################
#!/bin/bash
#
GatewayStart init script
### BEGIN INIT INFO
# Provides: GatewayStart.sh
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
все строки здесь прокомментированы #
Я не знаю, почему это удаляет это # с начала из некоторых строк.
#