LINUX.ORG.RU

crontab - как проверить интернет?

 ,


1

1

Добрый день. Что-то встрял на 2ух строчном скрипте по проверке интернета. Или туплю.

Есть машина на бубунте 16.04 с двумя сетевыми картами, одна карта смотрит в дом, вторая в свитч, так же в свитч воткнуто два провода от разных провов. Задача: при отвале одного провайдера, бубунта должна поменять настройки сетевой карты смотрящей в свитч так, чтобы она смотрела в сеть прова №2. Накидал скрипт, которые начинается со строк

#!/bin/bash
if [ "`ping -c1 8.8.8.8 | grep "64 bytes from 8.8.8.8"`" = "" ]
Делаю sh $путь_до_моего_скрипта - все срабатывает на ура, пихаю его в крон, в syslog есть строка, что скрипт выполняется по расписанию, но мой if не срабатывает. Вопрос: почему? Как будет правильнее?

В кроне прописан так: */1 * * * * $путь_до_моего_скрипта /dev/null/ 2>&1

★★


$ netdebug.sh
LAN IP...      Ok
Router...      Ok
WAN IP...      Ok
Gateway...     Ok
ISP DNS...     Ok
Google DNS...  Ok

$ cat /usr/local/bin/netdebug.sh
#!/bin/bash

# $1 - name
# $2 - IP address
function TestIP()
{
        echo -n "$1 "
        ping $2 -nq -c 1 -w 1 > /dev/null
        if [[ $? -eq 0 ]]; then
                echo -e "\e[1;32mOk\e[0m"
                return 0
        else
                echo -e "\e[1;31mFailed\e[0m"
                return 1
        fi
}


TestIP "LAN IP...     " 1.2.3.4 && \
TestIP "Router...     " 5.6.7.8 && \
TestIP "WAN IP...     " 9.10.11.12 && \
TestIP "Gateway...    " 13.14.15.16 && \
TestIP "ISP DNS...    " 17.18.19.20 && \
TestIP "Google DNS... " 8.8.8.8
Kroz ★★★★★
()
Ответ на: комментарий от Pyzia

Ни один, ни второй не работает. если просто запустить - работает, а вот крон почему-то кладет болт.

null123 ★★
() автор топика

Можно использовать код возврата, вместо grep.

if ping -q -n -c 3 -W 1 10.8.8.8 > /dev/null ; then echo Ok; else echo fail; fi
anonymous
()
Ответ на: комментарий от Kroz

Дернул кусок, чуть подправил

 ping 8.8.8.8 -nq -c 1 -w 1 > /dev/null
        if [[ $? -eq 0 ]]; then
     
                return 0
        else
                ifconfig eth0....bla-bla-bla
                return 1
        fi

Все равно. при запуске скрипт работает, в кроне - нет.

null123 ★★
() автор топика
Ответ на: комментарий от null123

1) Очевидно, что ping-а просто нет в PATH cron-а.
Так что или устанавливай нужный PATH в crontab, или вызывай ping по полному пути.
2) «if [[ $?...» - а зачем эта бредятина, так же как и всё написаноое тобой и другими выше? Вот постом выше anonymous написал нормально.

ABW ★★★★★
()
Ответ на: комментарий от ABW

«if [[ $?...» - а зачем эта бредятина

Читабельней

А вот у анонимуса - тухлый код.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
if [ "`ping -c1 8.8.8.8 | grep "64 bytes from 8.8.8.8"`" = "" ]

А зачем так сложно-то? Обфускация? Почему не:

if ping -c1 8.8.8.8; then
   ...
fi

? ping же нормально выдаёт код завершения…

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 1)

Может будет проще ||

Ygor ★★★★★
()

В начало скрипта

#!/bin/bash -x
И заставь его писать лог, прямо в кроне в конце пути к скрипту добавь:
>> /tmp/mylog.log
Вывод сюда.

Pyzia ★★★★★
()
Ответ на: комментарий от Pyzia

Помогло. Спасибо. Кстати, в лог он ничего не писал. тишина. добавил в скрипт echo - его выхлоп пошел в лог.

ABW

Очевидно, что ping-а просто нет в PATH cron-а.

пинг есть. почему-то /sbin/ нету, а там лежат ifconfig и route которыми я настройки сетевой правлю.

null123 ★★
() автор топика
Последнее исправление: null123 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.