The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Умирает скрипт из автозапуска, !*! dvl, 09-Окт-20, 16:00  [смотреть все]
Уважаемые спецы:
имеется проблема - есть скрипт на Bash , в нем простой бесконечный цикл (ping через nc).
При запуске из консоли - работает чудно и бесконечно, поставил в автозагрузку, стартует но умирает в течении 1 -5 минут.
Есть идеи?

(старт через init.d , все это в BuzyBox).

  • Умирает скрипт из автозапуска, !*! Аноним, 18:18 , 09-Окт-20 (1)
    > (старт через init.d , все это в BuzyBox).

    в inittab добавь

    :2345:respawn:/путь/кскрипту

    будет работать вечно

    • Умирает скрипт из автозапуска, !*! dvl, 11:44 , 12-Окт-20 (3)
      >> (старт через init.d , все это в BuzyBox).
      > в inittab добавь
      > :2345:respawn:/путь/кскрипту
      > будет работать вечно

      Спасибо за ответ, но inittab в системе нет:

      /etc # ls
      TZ                hosts             passwd            resolv.conf
      components.xml    localtime         ppp               services
      cpe.pem           modules.autoload  preinit           shells
      devices           mtab              profile           uci-defaults
      group             nginx             protocols         wlan
      host.conf         nsswitch.conf     rc.common

      добавил пустой inittab со строкой :2345:respawn:/opt/root/my_script
      не запустился вовсе
      Что не так сделал?

    • Умирает скрипт из автозапуска, !*! dvl, 14:06 , 12-Окт-20 (5)
      >> (старт через init.d , все это в BuzyBox).
      > в inittab добавь
      > :2345:respawn:/путь/кскрипту
      > будет работать вечно

      вычистил нутро у скрипта, оставил только цикл:

      #!/bin/sh

      sleep=15

      while true
      do

      sleep $sleep

      done

      Умирает , как и раньше.

  • Умирает скрипт из автозапуска, !*! Licha Morada, 20:29 , 09-Окт-20 (2)
    > При запуске из консоли - работает чудно и бесконечно, поставил в автозагрузку,
    > стартует но умирает в течении 1 -5 минут.
    > Есть идеи?

    А в логах что? Вдруг скрипт течёт, и его OOM Killer прибивает.

    А если утроить интервал ping, будет ли он умирать в течение 3-15 минут вместо 1-5?

    А если воткнуть sleep 30 в начало скрипта, начинает ли он вести себя по другому?

    А если запустить скрипт не просто так, а "завёрнутым" в какой-нинудь screen или tmux, там что-нибудь видно в выводе?
    https://askubuntu.com/questions/261899/run-a-screen-session-...

    А вообще, "ping через nc" это как?

    • Умирает скрипт из автозапуска, !*! dvl, 11:50 , 12-Окт-20 (4)
      >[оверквотинг удален]
      >> Есть идеи?
      > А в логах что? Вдруг скрипт течёт, и его OOM Killer прибивает.
      > А если утроить интервал ping, будет ли он умирать в течение 3-15
      > минут вместо 1-5?
      > А если воткнуть sleep 30 в начало скрипта, начинает ли он вести
      > себя по другому?
      > А если запустить скрипт не просто так, а "завёрнутым" в какой-нинудь screen
      > или tmux, там что-нибудь видно в выводе?
      > https://askubuntu.com/questions/261899/run-a-screen-session-...
      > А вообще, "ping через nc" это как?

      В var/log - пусто (это даже не комп, это роутер c entware)
      последняя запись $! - всегда 0.
      Ну, да, это я ошибся, nc отправляеет результат ping_а дальше. Проверка - просто ping.
      Цикл с 15 сек. задержкой, изменение sleep ничего не дает :(
      "завернуть" - буду читать и пробовать.....

      • Умирает скрипт из автозапуска, !*! Licha Morada, 18:54 , 12-Окт-20 (6)
        >> А вообще, "ping через nc" это как?
        > Ну, да, это я ошибся, nc отправляеет результат ping_а дальше. Проверка -
        > просто ping.

        Может быть, это не ping умирает а nc? Например, nc запустил сессию TCP, а инициализация устройства продолжилась и кто-то передёрнул сеть.
        Попробуйте задачу покрутить исключительно локально.

        • Умирает скрипт из автозапуска, !*! dvl, 22:30 , 12-Окт-20 (7)
          >>> А вообще, "ping через nc" это как?
          >> Ну, да, это я ошибся, nc отправляеет результат ping_а дальше. Проверка -
          >> просто ping.
          > Может быть, это не ping умирает а nc? Например, nc запустил сессию
          > TCP, а инициализация устройства продолжилась и кто-то передёрнул сеть.
          > Попробуйте задачу покрутить исключительно локально.

          Ну, нет. выбросил все сетевые штуки из скрипта, оставил только цикл и sleep в нем, результат - умирает через шаг...

          • Умирает скрипт из автозапуска, !*! Licha Morada, 00:33 , 13-Окт-20 (8)
            Я хз, но ещё можно копнуть так. С помощью set посмотреть все переменные окружения и сравнить между запусками из терминала и из автостарта.
            Типа: set > /MyScriptEnv_`date +%FT%H%M%S`.txt

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

            А запуск из init.d это как? Вы положили свой скрипт в директорию /etc/init.d и понаделали симлинков в /etc/rc.N? Может быть, удобнее было бы запускать его из /etc/rc.local?

            • Умирает скрипт из автозапуска, !*! dvl, 09:24 , 13-Окт-20 (9)
              > Я хз, но ещё можно копнуть так. С помощью set посмотреть все
              > переменные окружения и сравнить между запусками из терминала и из автостарта.
              > Типа: set > /MyScriptEnv_`date +%FT%H%M%S`.txt
              > По моему опыту, большинство проблем "в терминале работает а в автозапуске нет"
              > связано с переменными окружения.
              > А запуск из init.d это как? Вы положили свой скрипт в директорию
              > /etc/init.d и понаделали симлинков в /etc/rc.N? Может быть, удобнее было бы
              > запускать его из /etc/rc.local?

              Да, скрипт просто положил в init.d , добавил к имени спереди S96, и все.

              • Умирает скрипт из автозапуска, !*! Licha Morada, 18:28 , 13-Окт-20 (10)
                > Да, скрипт просто положил в init.d , добавил к имени спереди S96,
                > и все.

                У вас точно System V init?

                Я бы предположил, что кто-то за этим делом присматривает, и если скрипт не демонизируется за разумное время, то его прибивают.
                Попробуйте выкрутить на минимум интервал итераций, если я прав то оно успеет оправить больше отного ping-а. Это не решение, а уточнить диагностику.
                Попробуйте https://linux.die.net/man/1/daemonize

                Ну, или зовите свой скрипт из rc.local.

                • Умирает скрипт из автозапуска, !*! dvl, 14:41 , 14-Окт-20 (11)
                  >> Да, скрипт просто положил в init.d , добавил к имени спереди S96,
                  >> и все.
                  > У вас точно System V init?
                  > Я бы предположил, что кто-то за этим делом присматривает, и если скрипт
                  > не демонизируется за разумное время, то его прибивают.
                  > Попробуйте выкрутить на минимум интервал итераций, если я прав то оно успеет
                  > оправить больше отного ping-а. Это не решение, а уточнить диагностику.
                  > Попробуйте https://linux.die.net/man/1/daemonize
                  > Ну, или зовите свой скрипт из rc.local.

                  Вы оказались совершенно правы:
                  загрузкой и выгрузкой из init.d рулит скрипт rc.unslung
                  вот его нутро:


                  #!/bin/sh

                  PATH=/opt/sbin:/opt/bin:/opt/usr/sbin:/opt/usr/bin:/usr/sbin:/usr/bin:/sbin:/bin

                  # Start/stop all init scripts in /opt/etc/init.d including symlinks
                  # starting them in numerical order and
                  # stopping them in reverse numerical order

                  #logger "Started $0${*:+ $*}."

                  ACTION=$1
                  CALLER=$2

                  LD_LIBRARY_PATH=""

                  if [ $# -lt 1 ]; then
                      printf "Usage: $0 {start|stop|restart|reconfigure|check|kill}\n" >&2
                      exit 1
                  fi

                  [ $ACTION = stop -o $ACTION = restart -o $ACTION = kill ] && ORDER="-r"

                  for i in $(/opt/bin/find /opt/etc/init.d/ -perm '-u+x' -name 'S*' | sort $ORDER ) ;
                  do
                      case "$i" in
                          S* | *.sh )
                              # Source shell script for speed.
                              trap "" INT QUIT TSTP EXIT
                              #set $1
                              #echo "trying $i" >> /tmp/rc.log
                              . $i $ACTION $CALLER
                              ;;
                          *)
                              # No sh extension, so fork subprocess.
                              $i $ACTION $CALLER
                              ;;
                      esac
                  done

                  • Умирает скрипт из автозапуска, !*! Licha Morada, 19:27 , 14-Окт-20 (13)
                    > загрузкой и выгрузкой из init.d рулит скрипт rc.unslung

                    Замечательно. Правда, не вижу чтобы rc.unslung как-то контролировал, как ведут себя дети.

                    Тем не менее, советую держать ваш скрипт где-то ещё, а в /etc/init.d положить минималистическую "обёртку" для него, которая бы умела реагировать на start|stop|restart, демонизировать сервис и т.д.

                    Посмотрите в качестве примера на соседей /etc/init.d/S*.
                    У меня нет под рукой OpenWRT чтобы посмотреть, но, возможно, необходимая обёртка есть в /etc/rc.common
                    https://stackoverflow.com/questions/33340659/how-to-auto-sta...




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

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