Автоподъем демона (Bash)

Модератор: Модераторы разделов

shadow999
Сообщения: 168

Автоподъем демона

Сообщение shadow999 »

Добрый день, товарищи программисты... Написал скрипт для автоподъема демона при его нежелательном падении.

Дано:
  • Демон, имеющий 1-30 подпрограмм.
  • 1 программа в приоритете, лежит она - плохо, лежат остальные - ничего страшного.


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


Так как я полный ламер в данном языке, не могли бы вы помочь мне переделать программу, скажем, сделать её проще, быстрее, читабельнее. Ибо скрипт будет запускаться примерно раз в 5-10 минут. А это 144-360 раз в день. Я так подумал, то что я тут написал положит мне сервер уже через 2 дня работы. Очень прошу :console:

Код: Выделить всё

#!/bin/sh

    PW_PATH=/home
    Online=false
    Num=0

GS="$(ps -A w | grep ./gs | grep -v grep)"

    for gs in $GS
        do

            if [ $gs = "gs01" ]
            then
                Online=true
                break
            fi

            Num=`expr ${Num} + 1`

        done

if [ ${Num} -ge 6 ];
        if [ ${Online} = false ];
        then
            Поднимаем демон
        fi
then
    continue
fi


Пример

Код: Выделить всё

debian:~# ps -A w | grep ./gs | grep -v grep
 7389 ?        Sl    20:58 ./gs gs01
 7442 ?        Sl    10:37 ./gs is01
 7464 ?        Sl    11:19 ./gs is12

Демон работает :)

Пример

Код: Выделить всё

debian:~# ps -A w | grep ./gs | grep -v grep
 7442 ?        Sl    10:37 ./gs is01
 7464 ?        Sl    11:19 ./gs is12

Демон не работает :( Поднимаем

Пример

Код: Выделить всё

debian:~# ps -A w | grep ./gs | grep -v grep

Нет ответа. Значит ничего не делаем.

Заранее огромное спасибо...
P.S. Извините если с разделом ошибся.
Спасибо сказали:
shotdownsystem
Сообщения: 423
ОС: Basic command interpreter

Re: Автоподъем демона

Сообщение shotdownsystem »

я такое у себя во всех программах делаю, программная сторожевая собачка:
запускаю процесс который запускает другие процессы и ожидает SIGCHLD.
puts ("Working, please wait...");while(1);
Спасибо сказали:
shadow999
Сообщения: 168

Re: Автоподъем демона

Сообщение shadow999 »

Оу... Ну это уже на Си или перле надо писать. Можно узнать примерный синтаксис, если не сложно?. Ну а если дадите алгоритм, хотя бы словами, я офигенно благодарен буду.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4463
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Автоподъем демона

Сообщение Rootlexx »

Если я всё правильно понял, то вполне достаточно:

Код: Выделить всё

#!/bin/bash
if pidof gs &> /dev/null && ! ps -C gs -o args -ww | grep -q gs01; then
  # Запуск "упавшей" программы
  ...
fi
Спасибо сказали:
shadow999
Сообщения: 168

Re: Автоподъем демона

Сообщение shadow999 »

Отлично работает... Спасибо большое) Правда пока нету возможности выключить процесс, чтобы проверить будет ли он восстанавливать демон если не включен процесс ./gs. Но определять онлайн или оффлайн подпрограммы он может. :sleep:
Спасибо сказали: