LINUX.ORG.RU

Авто запуск скрипта .sh, и чтоб он не мешался, т.к.он зацикленный, как?


0

1

1) Куда собственно его положить и откуда запускать на линуксе?

2) Есть скрипт написанный на коммандной строке винды, который при отсутствии пинга, посылает смс, при возобновлении пинга посылает другую смс. Кто может помочь переписать его под линукс?

Вот скрипт:

set flag=0

set flag2=0

:loop

ping 192.168.2.2 | find «TTL=» > null

if %errorlevel%==1 goto l1

if %errorlevel%==0 goto l3

:l1

if %flag2%==0 goto l2

goto l5

:l2

call c:\windows\explorer.exe http://smsc.ru/sys/send.php?login=*****&psw=*****&phones=*****&mes=Канал не работает

set flag=1

set flag2=1

goto l5

:l3

if %flag%==1 goto l4

goto l5

:l4

call c:\windows\explorer.exe http://smsc.ru/sys/send.php?login=*****&psw=*****&phones=*****&mes=Канал работает

set flag=0

set flag2=0

:l5

goto loop



Последнее исправление: degrees (всего исправлений: 3)

я этого вашего cmd.exe не знаю, но, наверное так:

while sleep 10m; do
if ping -qc1 -w5 ya.ru; then
curl -gs 'http://smsc.ru/sys/send.php?login=*****&psw=*****&phones=*****&mes=Канал не работает'
else
curl -gs 'http://smsc.ru/sys/send.php?login=*****&psw=*****&phones=*****&mes=Канал работает'
fi
done
10m — это 10 минут
у меня так сделано автоподнятие vpn при падении, без всяких отправок sms

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

он у тебя будет каждые 10 минут слать «канал работает», а надо 1 раз, как я понял из того спагетти ;)

aol ★★★★★
()

Куда собственно его положить

Куда угодно. Например, в /usr/local/bin, в ~/bin или в ~/.bin.

откуда запускать на линуксе?

Оттуда, куда положил.

Кто может помочь переписать его под линукс?

Если на баш переписать, то примерно так:

#!/bin/sh
SENTOK=
SENTFAIL=
while :; do
    if ping -c1 -W1 192.168.2.2; then
        if [ -z "$SENTOK" ]; then
            xdg-open 'http://smsc.ru/sys/send.php?login=*****&psw=*****&phones=*****&mes=Канал работает'
        fi
        SENTOK=1
        SENTFAIL=
    else
        if [ -z "$SENTFAIL" ]; then
            xdg-open 'http://smsc.ru/sys/send.php?login=*****&psw=*****&phones=*****&mes=Канал не работает'
        fi
        SENTFAIL=1
        SENTOK=
    fi
    sleep 1
done
gentoo_root ★★★★★
()

Почитайте man bash, advanced bash scripting guide, перепешите с использованием условий if - then - else.

Пример:


#!/bin/sh

LOGIN=«mylogin»
PASSWORD=«p4ssw0rd»
PHONES="..."
ADDRESS=«192.168.2.2»
URL="http://smsc.ru/sys/send.php"

fail=0
while :; do
oldfail=$fail
ping -q -c 4 $ADDRESS
fail=$?
if [ $oldfail -ne $fail ]
then
case $fail in
1)
wget -q -O /dev/null «${URL}?login=${LOGIN}&psw=${PASSWORD}&phones=${PHONES}&mes=Канал не работает» ;;
0)
wget -q -O /dev/null «${URL}?login=${LOGIN}&psw=${PASSWORD}&phones=${PHONES}&mes=Канал работает» ;;
esac
fi
done

AITap ★★★★★
()

Всем спасибо, попробую отпишусь.

degrees
() автор топика
Ответ на: комментарий от AITap
PINGING=1.2.3.4
CHECK_INTERVAL=17
on_ok=actionok
on_fail=actionfail

sendsms() {
    wget -q -O /dev/null "http://smsc.ru/sys/send.php?login=*****&psw=*****&phones=*****&mes=$*"
}

actionok() { sendsms Канал+работает ; }
actionfail() { sendsms Канал+не+работает ; }

while true ; do
    ping -q -c 1 -w 2 $PINGING > /dev/null && {
        $on_ok ; on_ok= ; on_fail=actionfail
    } || {
        $on_fail ; on_ok=actionok ; on_fail=
    }
    sleep $CHECK_INTERVAL
done
berrywizard ★★★★★
()
Ответ на: комментарий от berrywizard

И да, в rc.local
sh /path/to/script < /dev/null > /dev/null 2> /dev/null &
либо
screen -d -m sh /path/to/script

Или накарябать rc скрипт, делающий ровно то же самое, но тогда можно будет более красиво управлять этой байдой (service linkmon start/stop); я бы тогда в sendsms() вызов logger ещё воткнул бы.

berrywizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.