LinuxForum.Fans
Тема

Скрипт для проверки работы программы или службы

Автор: tnega 28 сообщений 11094 просмотров
#30447

Здравствуйте, сразу скажу, что новичек в этом всём, но кое что уже успел понять :)
проблема - у меня стоит Debian и используется он в качестве шлюза доступа в интернет, установлена на нем служба upnpd для автоматического перенаправления портов.
Время от времени она перестает работать - зависает (процесс висит, но порты не открываются), либо просто отключается. Может поработать и несколько суток без проблем, а может и через 1-2 часа отключиться сама по себе:)

В общем нужен скрипт для проверки - запущена ли эта служба или нет :) чтобы скрипт в случае необнаружения службы в процессах - запускал ее поновой:)

помогите пожалуйста.

#30451

Ну к примеру для просмотра "статуса" службы можно использовать команду:
[console]
ps aux | grep служба
[/console]
покажите кстати вывод ps aux | grep upnpd

#30477

router:~# ps aux | grep upnpd
root 22937 33.5 0.5 103720 1476 ? S<l 13:02 175:50 upnpd eth0 eth1
root 28032 50.7 0.5 102696 1376 ? S<l 20:08 49:29 upnpd ppp0 eth1
root 29261 0.0 0.3 3144 780 pts/1 S<+ 21:46 0:00 grep upnpd

держите

#30490

что будет если набрать

text
/etc/init.d/имя_службы status

?

#30491

посмотреть то можно естественно :) просто мне нужен скрипт, который бы просматривал, запущены ли эти две службы :) в случае необнаружения одной или обоих служб, запускал бы их поновой :)

system-root написал:
что будет если набрать
text
/etc/init.d/имя_службы status

?

запустилась служба :)

#30498

вот пример проверки для обычной службы

text
if [  "$(/etc/init.d/служба status)" != "служба is running." ];

нужен весь
/etc/init.d/служба, как он там
/etc/init.d/upnpd назывется?

так, мне нужен полный /etc/init.d/upnpd и вообще название этой службы как пакета, чтоб я мог себе его поставить, потому, что я понятие не имею что это такое.
и еще вопрос, во время вылета, pid фал остается?

#30501
system-root написал:
вот пример проверки для обычной службы
text
if [  "$(/etc/init.d/служба status)" != "служба is running." ];

нужен весь
/etc/init.d/служба, как он там
/etc/init.d/upnpd назывется?

/etc/init.d/upnp - вот так

в этой файле у меня вот что:

#!/bin/bash
/usr/sbin/upnpd eth0 eth1
/usr/sbin/upnpd ppp0 eth1


название службы как пакета - upnpd если не ошибаюсь, ссылка на сайт - http://linux-igd.sourceforge.net/

насчет PID файла не знаю, почему служба сама по себе вылетает или зависает я тоже понятия не имею :(
служба эта нужна для автоматичесокго перенаправления портов, в основном у меня она используется для торрент клиентов, без этой службы торренты плохо работают :)

#30502

tnega, запустите ЭТО, идите в директорию /var/pid и ищите его pid файл, если он есть - хорошо, есть надежда на написание нормального скрипта запуска.

#30505
system-root написал:
tnega, запустите ЭТО, идите в директорию /var/pid и ищите его pid файл, если он есть - хорошо, есть надежда на написание нормального скрипта запуска.

/var/pid такая директория к сожалению отсутствует
но где то я недавно встерчал директорию с пид файлами, и точно запомнил, что там небыло пид файла моей службы.
По команде ps -eafw - смотрю какие процессы у меня запущены, UPNPD службе всегда выдается при каждом запуске разный PID. Может я не понимаю Вас?! :) прошу прощения заранее.

в директории /var/run много файлов с расширением PID, тут наверное я и побывал.

может можно там самому создать файл PID ? и чтобы при загрузке он выдавал моей службе один и тот же ПИД?

#30507

tnega, да, действительно /var/run, моя ошибочка, вот только если там нету pid файла, то всё, написать по человечески скрипт не получиться, ща попробую по дебильному, но хоть рабочий какойнить.

#30510
system-root написал:
tnega, да, действительно /var/run, моя ошибочка, вот только если там нету pid файла, то всё, написать по человечески скрипт не получиться, ща попробую по дебильному, но хоть рабочий какойнить.

большое спасибо, буду ждать, но учтите, у меня работают сразу два процесса upnpd, а именно:
upnpd eth0 eth1
и
upnpd ppp0 eth1

#30515

UPD по красивей
проверьте

text
#!/bin/bash
statusq () {
    ps aux | grep [u]pnpd >/dev/null || ret=$?;
if [ "$ret" == 1 ]
then 
    killall -9 upnpd >&2;
    /etc/init.d/upnp >&2;
    exit 1;
else
    echo "runing">&2;
    exit 1;
fi;
}
statusq

при запущенном процессе, потом убейте процесс командой killall -9 upnpd
и еще раз запустите скрипт

#30528
system-root написал:
UPD по красивей
проверьте
text
#!/bin/bash
statusq () {
    ps aux | grep [u]pnpd >/dev/null || ret=$?;
if [ "$ret" == 1 ]
then 
    killall -9 upnpd >&2;
    /etc/init.d/upnp >&2;
    exit 1;
else
    echo "runing">&2;
    exit 1;
fi;
}
statusq

при запущенном процессе, потом убейте процесс командой killall -9 upnpd
и еще раз запустите скрипт



написал скрипт, дал файлу права на исполнение, но что то неработает.

и еще вот что пишет:

router:~# ./upnpdtest.sh
Использование: grep [OPTION]... PATTERN [FILE]...
Попробуйте `grep --help' для получения более подробного описания.

}
statusq

эти две строки тоил я забыл сначала написать, толи Вы недописали, я их сейчас дописал - результат тот же

#30532

tnega,
А второй grep для каких целей? На него и ругается, он же без аргументов

#30533

tnega, вы там потеряли "-v grep" по дороге, я немного переписал его, проверьте новый и не потеряйте ничего при копировании.

#30534

Хорошо, сейчас попробую

#30535

system-root,

А не так?

text
/etc/init.d/upnp start >&2;
#30536

Hvzh, файл //etc/init.d/upnp выглядит к сожалению так:

text
#!/bin/bash
/usr/sbin/upnpd eth0 eth1
/usr/sbin/upnpd ppp0 eth1
#30542

system-root,
Ясно, у мну просто этого вообще нет

#30550



чего то не хочет :( скрипт вроде выполняется, а действий некаких, убил обе службы в процессах, запускаю скрипт - ноль эмоций :(

но может быть такая ситуация, что это слетит - upnpd eth0 eth1
а
upnpd ppp0 eth1 останется работать :)

Войдите или зарегистрируйтесь, чтобы ответить.