The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"shell скрипт в cron'е(косяк)"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"shell скрипт в cron'е(косяк)"  
Сообщение от quest (??) on 25-Июн-07, 10:52 
Hi всем
Дано - тунель VPN
Проблема - он иногда падает :-)
Вопрос:

Решил я автоматизировать процесс проверки состояния тунеля.
Наварганил скриптик который в зависимости от состояния тунеля либо поднимает его заново либа оставляет в покое, если он нормально функцианирует.

Скрипт отрабатывает как надо без проблем, но стоит его запуск поместить в crontab начинаются косяки.
Т.Е. при перезапуске тунеля из скрипта он должен вешатся на тот же интерфейс скажем tun0, а по крону он его вешает на новый т.е. tun0 висит, а cron создает tun1.
Понятно что мне так нифига не покатет из за rout'а, да и фаер на tun0 завязан.

Не понятно только то, что при ручном запуске скрипт отрабатывает так как нужно.

Вот собственно и вся проблема.

###################################################################################
#!/bin/sh

i=0

STATE=`ping -c 3 192.168.0.1 > /dev/null 2>&1 && echo UP || echo DOWN`

case "$STATE" in
    DOWN)
        logger -t $0 -i 'SSH tunnel in state DOWN'
        logger -t $0 -i 'vpnstat try change state to UP'

        PID="$(echo 'printf("%d",(split/\s{1,}/,`ps aux | grep -v "grep" | grep "ppp -auto vpn"`)[1])' | perl)"


        if [ ${PID} -gt 0 ];then
            /bin/kill -15 ${PID} >/dev/null 2>&1;
        else
            /sbin/ifconfig tun0 delete > /dev/null 2>&1
        fi
      

        /usr/sbin/ppp -auto vpn >/dev/null 2>&1;

        logger -t $0 -i 'SSH tunnel in state UP'
        break;;
    *)
        break;;
esac

#################################################################################

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "shell скрипт в cron'е(косяк)"  
Сообщение от guest (??) on 25-Июн-07, 15:52 
Да интузиазм АЖНО прет
Че даже ни у кого ни каких идей нет?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "shell скрипт в cron'е(косяк)"  
Сообщение от vic (??) on 25-Июн-07, 16:13 
>Да интузиазм АЖНО прет
>Че даже ни у кого ни каких идей нет?

ну расставь печать пошагам в скрипте и смотри по каким веткам он идет когда из crontab запускается. существует ли в момент подъятия интерфеса предыдущий или нет.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "shell скрипт в cron'е(косяк)"  
Сообщение от guest (??) on 25-Июн-07, 16:45 
>ну расставь печать пошагам в скрипте и смотри по каким веткам он
>идет когда из crontab запускается. существует ли в момент подъятия интерфеса
>предыдущий или нет.


Ну ты думаешь что я до этого не допер :-)

Проблема в другом. По идеи после того как kill поцесс, освобождаются все его ресурсы, так?
Попробуй в системе убить процесс так сказать владелец интерфейса, и этот девайс тоже упадет, т.е. освободит место.

Если ты не заметил в скрипте всего два витвления
1. Первое, при наличии ppp процесса убивает его, а следовательно и интерфейс
2. Второе выполняется в случаЕ отсутствия ppp процесса, нагло опускает интерфейс
Тут все просто как три копейки, печать будет в любом случае нормальная.


На последок повторюсь В ОБЫЧНОМ РЕЖИМЕ СКРИПТ ОТРАБАТЫВАЕТ КАК НУЖНО

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "shell скрипт в cron'е(косяк)"  
Сообщение от NuINu (??) on 25-Июн-07, 17:39 
>>ну расставь печать пошагам в скрипте и смотри по каким веткам он
>>идет когда из crontab запускается. существует ли в момент подъятия интерфеса
>>предыдущий или нет.
>
>
>Ну ты думаешь что я до этого не допер :-)
>
>Проблема в другом. По идеи после того как kill поцесс, освобождаются все
>его ресурсы, так?
>Попробуй в системе убить процесс так сказать владелец интерфейса, и этот девайс
>тоже упадет, т.е. освободит место.
>
>Если ты не заметил в скрипте всего два витвления
>1. Первое, при наличии ppp процесса убивает его, а следовательно и интерфейс
>
>2. Второе выполняется в случаЕ отсутствия ppp процесса, нагло опускает интерфейс
>Тут все просто как три копейки, печать будет в любом случае нормальная.
>
>
>
>На последок повторюсь В ОБЫЧНОМ РЕЖИМЕ СКРИПТ ОТРАБАТЫВАЕТ КАК НУЖНО

ну а если в обычном режиме работает как нужно, копай в сторону переменных окружения, элементарный PATH проверь(все в лог короче :)), у меня был случай с ЛД_Сонфиг_пас. тоже блин парился.
заодно залогируй что там за пид убивается. сдается мне он в автомате не отрабатывает.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "shell скрипт в cron'е(косяк)"  
Сообщение от vic (??) on 25-Июн-07, 17:54 
>Ну ты думаешь что я до этого не допер :-)
Я не думаю, мне противопоказано сие действо =)
>
>Проблема в другом. По идеи после того как kill поцесс, освобождаются все
>его ресурсы, так?
>Попробуй в системе убить процесс так сказать владелец интерфейса, и этот девайс
>тоже упадет, т.е. освободит место.
Да я тоже иногда перечитываю матчасть, однако в моей практике был исключительный случай: kill -9 не срабатывал..

>
>Если ты не заметил в скрипте всего два витвления
>1. Первое, при наличии ppp процесса убивает его, а следовательно и интерфейс
одно скажу что -15 это не -9
15 - пока дойдет, пока отработает..
даже по -9 сниматься может дольше чем хочется. -9 это жестко)

>
>2. Второе выполняется в случаЕ отсутствия ppp процесса, нагло опускает интерфейс
delete это не down :) шучу)

>Тут все просто как три копейки, печать будет в любом случае нормальная.
а нас не интересует какая БУДЕТ печать, нас интересует какая печать ПРОИСХОДИТ. Причем именно из под крона. Кстати, пользователь тот же? =)


>На последок повторюсь В ОБЫЧНОМ РЕЖИМЕ СКРИПТ ОТРАБАТЫВАЕТ КАК НУЖНО
крон тупо запускает скрипт и это тоже обычный режим =)
разница только в отсутствии привязки к терминалу :)

с чего ему хавать 1 интерфейс, если 0 свободен? видимо не свободен.. а почему не свободен? вот в чем вопрос..

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "shell скрипт в cron'е(косяк)"  
Сообщение от universite email(??) on 26-Июн-07, 06:34 

>Скрипт отрабатывает как надо без проблем, но стоит его запуск поместить в
>crontab начинаются косяки.

whereis logger

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "shell скрипт в cron'е(косяк)"  
Сообщение от quest (??) on 26-Июн-07, 09:15 
>одно скажу что -15 это не -9
>15 - пока дойдет, пока отработает..
>даже по -9 сниматься может дольше чем хочется. -9 это жестко)

Да пробавал я и вместо -15 -9
Даже цикл вставлял для сто процентной уверенности

while [ "`ps aux | grep -v 'grep' | grep 'ppp -auto vpn'`"  ];do
  i=$(($i+1));
done

>а нас не интересует какая БУДЕТ печать, нас интересует какая печать ПРОИСХОДИТ. Причем именно из под крона. Кстати, пользователь тот же? =)

Какой пользователь? в кроне от рута запускается

>ну а если в обычном режиме работает как нужно, копай в сторону переменных окружения, элементарный PATH проверь(все в лог короче :)), у меня был случай с ЛД_Сонфиг_пас. тоже блин парился.
>заодно залогируй что там за пид убивается. сдается мне он в автомате не отрабатывает.

Вот в окружении я мало что понимаю в смысле переменных

сделал так из ручного режима записываю переменные окружения в файл и то же самое по крону(файлы разные)

вот что выдает diff (приведу тольео разницу р-ручной к-крон)

р-BASH_ENV=/root/.bashrc     к-пусто
р-BLOCKSIZE=K                к-пусто
р-HISTCONTROL=ignorespace    к-пусто
р-PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin к-PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
р-SHELL=/usr/local/bin/bash  к-SHELL=/bin/sh
р-SHLVL=3                    к-SHLVL=1
р-TERM=xterm                 к-TERM=dump

Все остольное одинаково

Долго мучился и спечатью и так в итоге вот что
PID="$(echo 'printf("%d",(split/\s{1,}/,`ps aux | grep -v "grep" | grep "ppp -auto vpn"`)[1])' | perl)"

в PID всегда NULL

пробовал так

PS=`ps aux | grep -v 'grep' | grep 'ppp -auto vpn'`
PID=`echo $PPPPS | cut -d ' ' -f2`

в PID опять NULL

Че за хрень понять не могу.
Есть соображения

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "shell скрипт в cron'е(косяк)"  
Сообщение от NuINu (??) on 26-Июн-07, 10:04 

>Долго мучился и спечатью и так в итоге вот что
>PID="$(echo 'printf("%d",(split/\s{1,}/,`ps aux | grep -v "grep" | grep "ppp -auto vpn"`)[1])'
>| perl)"
>
>в PID всегда NULL
>
>пробовал так
>
>PS=`ps aux | grep -v 'grep' | grep 'ppp -auto vpn'`
>PID=`echo $PPPPS | cut -d ' ' -f2`
>
>в PID опять NULL
>
>Че за хрень понять не могу.
>Есть соображения

есть, отлаживать надо лучше :)
уж больно сложное(для меня) у тебя выражение получается вот у меня работает(если находиться только один подобный процесс):

name=gnome-pty-helper
aga=`ps aux | grep -v "grep" | grep "$name"`
pid=`echo "printf(\"%d\",(split/\s{1,}/,\"$aga\")[1]);" | perl`
echo Pid is $pid

name свое подставь.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "shell скрипт в cron'е(косяк)"  
Сообщение от quest (??) on 26-Июн-07, 11:23 
>есть, отлаживать надо лучше :)
>уж больно сложное(для меня) у тебя выражение получается вот у меня работает(если
>находиться только один подобный процесс):
>
>name=gnome-pty-helper
>aga=`ps aux | grep -v "grep" | grep "$name"`
>pid=`echo "printf(\"%d\",(split/\s{1,}/,\"$aga\")[1]);" | perl`
>echo Pid is $pid
>
>name свое подставь.


Неа нифига не работает
А ты запускал по крону?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "shell скрипт в cron'е(косяк)"  
Сообщение от NuINu (??) on 26-Июн-07, 11:50 
>>есть, отлаживать надо лучше :)
>>уж больно сложное(для меня) у тебя выражение получается вот у меня работает(если
>>находиться только один подобный процесс):
>>
>>name=gnome-pty-helper
>>aga=`ps aux | grep -v "grep" | grep "$name"`
>>pid=`echo "printf(\"%d\",(split/\s{1,}/,\"$aga\")[1]);" | perl`
>>echo Pid is $pid
>>
>>name свое подставь.
>
>
>Неа нифига не работает
>А ты запускал по крону?
вот, работает.

0,10,20,30,40,50 * * * * /bin/sh -c /home/?????/work/sh/test/get_pid.sh >>/home/????/work/sh/test/get_pid.log  2>&1

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "shell скрипт в cron'е(косяк)"  
Сообщение от quest (??) on 26-Июн-07, 12:40 
Ну что господа хорошие большое спасибо за помощ и советы
Проблему решил заменой PS на FSTAT
PS отрабатывала както корява(накладывала строки на другие) вообщем на выходе не удавалось найти конкретную строку поиска
Что самое не понятное так это то что на линухе первоначальный скрипт (естественно с другим синтаксисом ifconfig) отрабатывает на УРА, а во фряхе вот такой геморой.

Если каму нужно вот рабочий vpnstat

###########################################################################

#!/bin/sh

STATE=`ping -c 3 192.168.0.1 > /dev/null 2>&1 && echo UP || echo DOWN`

case "$STATE" in
    DOWN)
        logger -t $0 -i 'SSH tunnel in state DOWN'
        logger -t $0 -i 'vpnstat try change state to UP'

        PID=`fstat | grep tun0 | xargs | cut -d ' ' -f3`

        if [ "$PID" -gt 0 ]; then
            /bin/kill -9 ${PID} >/dev/null 2>&1;
            /sbin/ifconfig tun0 down > /dev/null 2>&1
            /sbin/ifconfig tun0 delete > /dev/null 2>&1
        else
            /sbin/ifconfig tun0 down > /dev/null 2>&1
            /sbin/ifconfig tun0 delete > /dev/null 2>&1
        fi


        while [ "`ps aux | grep -v 'grep' | grep 'ppp -auto vpn'`"  ];do
            i=$(($i+1));
        done

        /usr/sbin/ppp -auto vpn >/dev/null 2>&1;

        logger -t $0 -i 'SSH tunnel in state UP'
        ;;
    *)
        ;;
esac

exit 0


###########################################################################

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру