LINUX.ORG.RU
ФорумAdmin

Авто перезапуск программки в консоле при вылете - есть что штатное?


0

1

В коносле запускаю программку, которая на экран выводит лог и иногда вылетает, поэтому приходится ее перезапускать.

есть ли решение именно для консоли, которое будет ее заново запускать? именно в терминале.

те набрал что то типа super_restarter ./my_buggy_programm

и если my_buggy_programm вылетела, то он ее заново запустил.

ps: демонов не предлагать ) нужно именно вот так из консольки, по простому.

> cat super_restarter

#!/bin/bash
trap "echo -e '\n';kill $$;kill -9 $$" 2
"$@"
a="$1"
while [ 0 = 0 ]
do
    sleep 1
    if [ `pgrep "$a"|wc -l` = 0 ] &&"$@"
done
teod0r ★★★★★
()
Последнее исправление: teod0r (всего исправлений: 2)
Ответ на: комментарий от bkarm

Лучше так:

while ! htop; do :; done
Программа будет перезапускаться пока не будет выключена штатно (с нулевым кодом возврата). Можно ещё вместо пустой команды ":" вставить «sleep 1», та проще тушить зациклившийся шелл по ctrl+c

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

while ! htop; do :; done

взял этот вариант, только добавил слип - в итоге все как хотел, спасибо огромное всем ))

x77cc33x
() автор топика
Ответ на: комментарий от emulek

когда ты давишь ^C, это код возврата 130.

Код возвращает программа. Плюс 130 меня смущает... Как воспроизвести без компиляния?

ziemin ★★
()
Ответ на: комментарий от ziemin

Код возвращает программа. Плюс 130 меня смущает... Как воспроизвести без компиляния?

нажать ^C, а потом написать echo $?

$ sleep 1h
^C
$ echo $?
130

Если тебе интересно, то SIGINT==2, а программа прерванная сигналом выдаёт сигнал+128. 128+2==130.

emulek
()
Ответ на: комментарий от prischeyadro

Если комп будет слишком быстрый, то можно и не продавить.

legolegs ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.