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. "Умирает скрипт из автозапуска"  +/
Сообщение от 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ообщить модератору

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

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

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

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

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

#!/bin/sh

sleep=15

while true
do

sleep $sleep

done

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

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

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. "Умирает скрипт из автозапуска"  +/
Сообщение от 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ообщить модератору

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

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

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

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

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

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

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ообщить модератору

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ообщить модератору

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ообщить модератору

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ообщить модератору

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ообщить модератору

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

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




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

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