LINUX.ORG.RU
решено ФорумAdmin

Запустить «упавшую» программу


0

1

Есть сервер на CentOS 5, на нем работает сервер HansaWorld Enterpise (бухгалтерия и т.д.) Эта Hansa иногда сама вываливается, требуется перезапуск, другого решения от разработчика нет. Все было бы просто, если не одно но, при запуске она работает в консоле и занимает её, выйдти из консоли во время работы нельзя. Я её запускаю через screen, чтоб можно удалённо по ssh посмотреть, запустить и выйдти. Нужно сделать так, чтоб скрипт отслеживал pid и запускал её снова если упала(это не проблема), НО! фишка в том, чтоб запускал опять в виртуальной консоле (screen), где она и была. Как это сделать я не знаю.


Ответ на: комментарий от sin_a

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

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

да, я понил. без перевода в бэкграунд это не форк бомб, а баловство одно.

zolden ★★★★★
()

думаю можно и без screen

Старый проверенный на билд серверах вариант: запуск с nohup и перенаправлением вывода в лог файл.
В крон (или initab по желанию) добавляете нечто вроде
*/5 * * * * pgrep -f Hansa &>/dev/null || nohup Hansa 1>&2 &>/tmp/hansa.log

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

Эта хренова Hansa не работает как демон, ей консоль подавай. Я имел ввиду каким образом заставить её запускаться именно в старом месте т.е. в виртуальной консоле, где она и была? Или я в Ваших рекомендациях чего то не понял?

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

> Эта хренова Hansa не работает как демон, ей консоль подавай.
Кто мешает воспользоваться nohup, & и перенаправлением вывода?

Я имел ввиду каким образом заставить её запускаться именно в старом месте т.е. в виртуальной консоле, где она и была?

Нужно изначально запускать её скриптом вроде такого: http://www.linux.org.ru/jump-message.jsp?msgid=6568702&cid=6568721
(а сам скрипт запускать в screen).

AITap ★★★★★
()

А в /etc/inittab настроить?

ansky ★★★★★
()
#!/bin/sh
case $1 in
start)
 /usr/local/bin/screen -R имя_сессии_скрина -d -m злобная_прога
    ;;
 stop)
    killall -9 злобная_прога
    ;;
*)
    echo "Usage: `basename $0` {start|stop}" >&2
    exit 64
    ;;
esac

exit 0

Что-то в этом роде (ну еще status нужно написать) и любую злобную прогу можно пихать в инит скрипты.

anonymous
()

прыщедавы придумали для этого runit например (:

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

Всем огромное спасибо, первый вариант прост и элегантен. С остальными буду экспериментировать. Во всяком случае проблема уже решилась. Спасибо всем, а за готовый скрипт отдельно.

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