Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Автоперезапуск упавшего процесса по PID [РЕШЕНО]  (Прочитано 4549 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн maxim317

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Добрый день!

Есть необходимость автоматического перезапуска упавшего процесса. Покопавшись в сети, собрал некую конструкцию, но.. она не работает))) Хотя по отзывам должна.

Пример скрипта:
#!/bin/sh
### BEGIN INIT INFO
# Provides: zx-TMserver-IRtm1_fast
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 5
# Description: majorFast
### END INIT INFO

case "$1" in
'start')
sleep 5;
cd /home/share/tm/irtm1/fast
./fast3.sh dedicated
echo $! majorFast up

while 1>0
do
ps -A | grep $! > /dev/null
if [ $? = "1" ]
then cd /home/share/tm/irtm1/fast
./fast3.sh dedicated
fi
sleep 5
done
;;

'stop')
echo majorFast down
;;
*)
echo "Usage: $0 { start | stop }"
;;
esac
exit 0

процесс запускается вот такой командой:
cd /home/share/tm/irtm1/fast
./fast3.sh dedicated

по скрипту, грип должен проверять, есть ли такой PID в системе, и если нет, то запустить процесс, если есть, то спать 5 секунд.
На деле же ничего не происходит(

Система Ubuntu Server 10.10, запуск идет из Webmin, пользователь/админ нуб.

Подскажите в чем ошибка?
« Последнее редактирование: 27 Мая 2011, 18:00:13 от maxim317 »

ыскуфь

  • Гость
1. В системе есть пользователь share?
2. скрипт надо запускать так: script.sh start &

Оффлайн maxim317

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
1. нет, такого пользователя нет. процессы запускаются от рута
2. всегда мучил вопрос, а зачем знак & в конце?

по сабжу. начал мучать start-stop-daemon, но как-то он ругается на сам процесс. пока не могу точно сформулировать.

ыскуфь

  • Гость
1. В скрипте указан путь cd /home/share/tm/irtm1/fast
Этого пути не существует!
2. Это значит запустить скрипт в фоне

Оффлайн maxim317

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
текс. недели колупания привели меня к следующему.
есть init-скрипт, который запускает демона и пишет его pid в файл.

Код init-скрипта:
(Нажмите, чтобы показать/скрыть)

Код демона:
(Нажмите, чтобы показать/скрыть)

*пользователь share уже есть.

За PID следит программка monit, которая в случае отсутствия pidfile перезапускает процесс. Но, перезапускает только в случае нормально завершения, по команде stop. А если демон сам по себе завершился, то он не удаляет за собой pidfile и соответственно monit считает, что демон работает и все хорошо.
Как сделать так, чтобы в случае внезапного падения демона pidfile стирался?


ыскуфь

  • Гость
Я не силён в bash
Но как-то так
#!/bin/bash
pid='/var/run/tm/fast6.pid'
while true;
do
if [ -a "$pid" ];
then
proc=`cat $pid`
gr=`ps -A|grep $proc`
if [ ! "$gr" ];
then
rm $pid
fi
fi
sleep 10
done;

Пользователь решил продолжить мысль 26 Мая 2011, 02:35:09:
скрипт берёт с файла pid, проверяет или есть такой процесс. Если нету, удаляет файл

andrey_p

  • Гость
Теоретически все правильно, но практически пара ошибок:

if [ -a "$pid" ]
надо

if [ -f "$pid" ]
и вместо

gr=`ps -A|grep $proc`
if [ ! "$gr" ];

надо

if ! ps -A | grep -q $proc

Оффлайн maxim317

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Благодарю всех за помощь!

последний скрипт немного переделал и отказался от monit в пользу cron.
(Нажмите, чтобы показать/скрыть)

 

Страница сгенерирована за 0.038 секунд. Запросов: 25.