Уважаемые спецы:
имеется проблема - есть скрипт на Bash , в нем простой бесконечный цикл (ping через nc).
При запуске из консоли - работает чудно и бесконечно, поставил в автозагрузку, стартует но умирает в течении 1 -5 минут.
Есть идеи?(старт через init.d , все это в BuzyBox).
> (старт через init.d , все это в BuzyBox).в inittab добавь
:2345:respawn:/путь/кскрипту
будет работать вечно
>> (старт через 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
не запустился вовсе
Что не так сделал?
> Спасибо за ответ, но inittab в системе нет:Странно, это что за разновидность врт такая ?
>> (старт через init.d , все это в BuzyBox).
> в inittab добавь
> :2345:respawn:/путь/кскрипту
> будет работать вечновычистил нутро у скрипта, оставил только цикл:
#!/bin/sh
sleep=15
while true
dosleep $sleep
done
Умирает , как и раньше.
> При запуске из консоли - работает чудно и бесконечно, поставил в автозагрузку,
> стартует но умирает в течении 1 -5 минут.
> Есть идеи?А в логах что? Вдруг скрипт течёт, и его OOM Killer прибивает.
А если утроить интервал ping, будет ли он умирать в течение 3-15 минут вместо 1-5?
А если воткнуть sleep 30 в начало скрипта, начинает ли он вести себя по другому?
А если запустить скрипт не просто так, а "завёрнутым" в какой-нинудь screen или tmux, там что-нибудь видно в выводе?
https://askubuntu.com/questions/261899/run-a-screen-session-...А вообще, "ping через nc" это как?
>[оверквотинг удален]
>> Есть идеи?
> А в логах что? Вдруг скрипт течёт, и его 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 ничего не дает :(
"завернуть" - буду читать и пробовать.....
>> А вообще, "ping через nc" это как?
> Ну, да, это я ошибся, nc отправляеет результат ping_а дальше. Проверка -
> просто ping.Может быть, это не ping умирает а nc? Например, nc запустил сессию TCP, а инициализация устройства продолжилась и кто-то передёрнул сеть.
Попробуйте задачу покрутить исключительно локально.
>>> А вообще, "ping через nc" это как?
>> Ну, да, это я ошибся, nc отправляеет результат ping_а дальше. Проверка -
>> просто ping.
> Может быть, это не ping умирает а nc? Например, nc запустил сессию
> TCP, а инициализация устройства продолжилась и кто-то передёрнул сеть.
> Попробуйте задачу покрутить исключительно локально.Ну, нет. выбросил все сетевые штуки из скрипта, оставил только цикл и sleep в нем, результат - умирает через шаг...
Я хз, но ещё можно копнуть так. С помощью set посмотреть все переменные окружения и сравнить между запусками из терминала и из автостарта.
Типа: set > /MyScriptEnv_`date +%FT%H%M%S`.txtПо моему опыту, большинство проблем "в терминале работает а в автозапуске нет" связано с переменными окружения.
А запуск из init.d это как? Вы положили свой скрипт в директорию /etc/init.d и понаделали симлинков в /etc/rc.N? Может быть, удобнее было бы запускать его из /etc/rc.local?
> Я хз, но ещё можно копнуть так. С помощью set посмотреть все
> переменные окружения и сравнить между запусками из терминала и из автостарта.
> Типа: set > /MyScriptEnv_`date +%FT%H%M%S`.txt
> По моему опыту, большинство проблем "в терминале работает а в автозапуске нет"
> связано с переменными окружения.
> А запуск из init.d это как? Вы положили свой скрипт в директорию
> /etc/init.d и понаделали симлинков в /etc/rc.N? Может быть, удобнее было бы
> запускать его из /etc/rc.local?Да, скрипт просто положил в init.d , добавил к имени спереди S96, и все.
> Да, скрипт просто положил в init.d , добавил к имени спереди S96,
> и все.У вас точно System V init?
Я бы предположил, что кто-то за этим делом присматривает, и если скрипт не демонизируется за разумное время, то его прибивают.
Попробуйте выкрутить на минимум интервал итераций, если я прав то оно успеет оправить больше отного ping-а. Это не решение, а уточнить диагностику.
Попробуйте https://linux.die.net/man/1/daemonizeНу, или зовите свой скрипт из rc.local.
>> Да, скрипт просто положил в init.d , добавил к имени спереди S96,
>> и все.
> У вас точно System V init?
> Я бы предположил, что кто-то за этим делом присматривает, и если скрипт
> не демонизируется за разумное время, то его прибивают.
> Попробуйте выкрутить на минимум интервал итераций, если я прав то оно успеет
> оправить больше отного ping-а. Это не решение, а уточнить диагностику.
> Попробуйте https://linux.die.net/man/1/daemonize
> Ну, или зовите свой скрипт из rc.local.Вы оказались совершенно правы:
загрузкой и выгрузкой из init.d рулит скрипт rc.unslung
вот его нутро:
#!/bin/shPATH=/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=$2LD_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
> загрузкой и выгрузкой из 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...