Мне распространяли регистраторы данных вокруг солнечной энергетической системы и единственной программы, которая работает в полночь, чтобы собрать данные дня и поместить их на жесткий диск.
Сценарий удара на сервере 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 большую часть времени. И я получаю слишком много переменного совета по всей сети о лучшем способе сделать это.
Таким образом, кто-либо может предложить простой способ сделать это?
Кажется, что Вы только интересуетесь статусом выхода 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
Я перенаправляю ping
STDOUT и потоки STDERR к /dev/null
поскольку мы не интересуемся теми.