The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
shell скрипт в cron'е(косяк), !*! quest, 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

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

  • shell скрипт в cron'е(косяк), !*! guest, 15:52 , 25-Июн-07 (1)
    Да интузиазм АЖНО прет
    Че даже ни у кого ни каких идей нет?
    • shell скрипт в cron'е(косяк), !*! vic, 16:13 , 25-Июн-07 (2)
      >Да интузиазм АЖНО прет
      >Че даже ни у кого ни каких идей нет?

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

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


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

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

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


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

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

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

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

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

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

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


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

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

  • shell скрипт в cron'е(косяк), !*! universite, 06:34 , 26-Июн-07 (6)

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

    whereis logger

  • shell скрипт в cron'е(косяк), !*! quest, 09:15 , 26-Июн-07 (7)
    >одно скажу что -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

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

    • shell скрипт в cron'е(косяк), !*! NuINu, 10:04 , 26-Июн-07 (8)

      >Долго мучился и спечатью и так в итоге вот что
      >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 свое подставь.

      • shell скрипт в cron'е(косяк), !*! quest, 11:23 , 26-Июн-07 (9)
        >есть, отлаживать надо лучше :)
        >уж больно сложное(для меня) у тебя выражение получается вот у меня работает(если
        >находиться только один подобный процесс):
        >
        >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 свое подставь.


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

        • shell скрипт в cron'е(косяк), !*! NuINu, 11:50 , 26-Июн-07 (10)
          >>есть, отлаживать надо лучше :)
          >>уж больно сложное(для меня) у тебя выражение получается вот у меня работает(если
          >>находиться только один подобный процесс):
          >>
          >>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

  • shell скрипт в cron'е(косяк), !*! quest, 12:40 , 26-Июн-07 (11)
    Ну что господа хорошие большое спасибо за помощ и советы
    Проблему решил заменой 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


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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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