The OpenNET Project / Index page

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



"Умирает скрипт из автозапуска"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Умирает скрипт из автозапуска"  +1 +/
Сообщение от dvlemail (ok), 09-Окт-20, 16:00 
Уважаемые спецы:
имеется проблема - есть скрипт на Bash , в нем простой бесконечный цикл (ping через nc).
При запуске из консоли - работает чудно и бесконечно, поставил в автозагрузку, стартует но умирает в течении 1 -5 минут.
Есть идеи?

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

Ответить | Правка | Cообщить модератору

Оглавление

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

1. Сообщение от Аноним (-), 09-Окт-20, 18:18   +/
> (старт через init.d , все это в BuzyBox).

в inittab добавь

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

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #3, #5

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #4

3. Сообщение от dvlemail (ok), 12-Окт-20, 11:44   +/
>> (старт через 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
не запустился вовсе
Что не так сделал?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #12

4. Сообщение от dvlemail (ok), 12-Окт-20, 11:50   +/
>[оверквотинг удален]
>> Есть идеи?
> А в логах что? Вдруг скрипт течёт, и его 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 ничего не дает :(
"завернуть" - буду читать и пробовать.....

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #6

5. Сообщение от dvlemail (ok), 12-Окт-20, 14:06   +/
>> (старт через init.d , все это в BuzyBox).
> в inittab добавь
> :2345:respawn:/путь/кскрипту
> будет работать вечно

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

#!/bin/sh

sleep=15

while true
do

sleep $sleep

done

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #7

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #8

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #9

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #10

10. Сообщение от Licha Morada (ok), 13-Окт-20, 18:28   +/
> Да, скрипт просто положил в init.d , добавил к имени спереди S96,
> и все.

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #11

11. Сообщение от dvlemail (ok), 14-Окт-20, 14:41   +/
>> Да, скрипт просто положил в 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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #13

12. Сообщение от Аноним (-), 14-Окт-20, 19:17   +/
> Спасибо за ответ, но inittab в системе нет:

Странно, это что за разновидность врт такая ?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

13. Сообщение от Licha Morada (ok), 14-Окт-20, 19:27   +/
> загрузкой и выгрузкой из 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...

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11


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

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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