Ubuntu 16.04, как использовать ping в сценарии удара, чтобы решить, пропустить ли блок кода

Мне распространяли регистраторы данных вокруг солнечной энергетической системы и единственной программы, которая работает в полночь, чтобы собрать данные дня и поместить их на жесткий диск.

Сценарий удара на сервере Ubuntu ступает через 7 единиц Raspbian, которым собрали данные, и кладет его на надлежащее место на жестком диске, в каталогах, названных единицами там. Я выяснил, как взять родовые названия today.dat и today.png и сохранить их с датой дня в архиве как 2017-08-10.png и 2017-08-10.dat

-> Иногда одна из единиц не будет отвечать из-за некоторой проблемы или другого, и это блокирует осуществление программы.

Таким образом, я хотел бы использовать ping, чтобы протестировать, отвечает ли система, прежде чем я решу, попытаться ли собрать данные из него.

Мои имена системы - все в/etc/hosts файле, таким образом, я ссылаюсь на них по имени.

В целях этого вопроса я проверяю СОЛНЕЧНУЮ ЭНЕРГИЮ - та, которая контролирует поведение контроллера и инвертора заряда.

Вот то, что я попробовал:

if $( ping -c 1 SOLAR | grep icmp* | wc -l ) eq 0
then
   (do stuff like ssh -e "gnuplot makepng" then scp the png and raw data)
fi

(слишком сложный)

и

if [ $(ping -c 1 SOLAR >/dev/null) eq 0 ]
    then do the stuff
fi

(взгляды хорошо, но я не понимаю потребность в квадратных скобках),

Должен быть лучший путь.

Я надеюсь сделать что-то больше как

if $(ping -c 1 SOLAR) eq 0
then
   (do stuff)
else
   (then maybe echo "SOLAR didn't respond" | ssmtp myname@gmail.com
fi

Я не запрограммировал, избивают несколько десятилетий - используемая оболочка C большую часть времени. И я получаю слишком много переменного совета по всей сети о лучшем способе сделать это.

Таким образом, кто-либо может предложить простой способ сделать это?

2
задан 11 August 2017 в 14:19

1 ответ

Кажется, что Вы только интересуетесь статусом выхода ping т.е. ли Вы получаете ICMP ECHO_RESPONSE от хоста до Вашего ECHO_REQUEST; можно просто сделать ping -c 1 ... и ping вышел бы с состоянием 0 если хост отправляет ответ, 1 если никакой ответ и 2 для неизвестного хоста.

Можно легко использовать это с if создайте; Вы не должны считать ответ, просто использовать ping как ifусловие как if оценил бы статус выхода ping продолжаться к любому определенному ответвлению:

if ping -c 1 SOLAR &>/dev/null; then
    ## Reachable -- do stuffs
else
    ## Unreachable -- do other stuffs
fi

Я перенаправляю pingSTDOUT и потоки STDERR к /dev/null поскольку мы не интересуемся теми.

2
ответ дан 2 December 2019 в 03:37

Другие вопросы по тегам:

Похожие вопросы: