* cкрипт обнаружения зависания\падучести с автоперезапуском (+) (как это работает?)

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

Ответить
Аватара пользователя
Doka
Сообщения: 715
Статус: ASIC Design Engineer
ОС: RHEL4

* cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение Doka »

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

1.
This one will actually try to connect to amule to check that it's alive.
It's supposed to restart amule even when it did not crash, but frozen. Which happens
from time to time.

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

#!/bin/sh

# aMule watchdog
# Checks on aMule every 5 (configurable parameter) minutes
# and restarts it if aMule does not respond.
# Requires Netcat
#
# Created by Demiurg - demiurg@tau<.>ac<.>il (Alexander Sirotkin)
# Have fun.

MULENAME=amule
MULE=`which ${MULENAME}`
NC=`which nc`

TCPPORT=4642
SLEEP=300

test -e ${MULE} || (echo "${MULE} not found. Dying"; exit 1)
test -e ${NC} || (echo "Netcat not found. Dying"; exit 1)

FIRSTLOOP=1

while true; do
#    echo "Waiting"
    test ${FIRSTLOOP}  || sleep ${SLEEP}
    unset FIRSTLOOP
#    echo "Checking"
    nc localhost ${TCPPORT} < /dev/null && continue
    echo "Restarting"
    date
    killall -9 ${MULENAME}
    sleep 1
    ${MULE} &
#    echo "Running"
done




2.
ehm... I've been hacking on the script, cuz I needed one to auto-start on boot. I've put it in KDE's autostart map (but I guess gnome and other wm's have similar places or functions). It'll start ?mule with a set priority (so it wont stall the system if its very busy or hangs) after a certain time (so the system can boot first, start all services etc - and then amule).

although this was based upon another script posted above, and on a small script I wrote earlier, this is actually the biggest script I've ever hacked upon, so pls check me and don't bite if it doesnt work ;-)

this is the script:

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

#!/bin/bash
# welcome
# aMule/xMule startup script - for putting in ~/.kde/Autostart.
# starts aMule/Xmule and continually checks if it's running (or stalled) - if things are wrong, it restarts aMule/xMule.
# by Superstoned,- I actually just extended script the by Demiurg.
# Requires Netcat.

# first some checkups and settings
# priority can be set with nice. higher nice is lower priority. you can't set nice lower than 0 unless you're root. dont set higher than 13.
# tcpport must be same as in amule/xmule (see settings of the mule)
# sleep sets interval in seconds for the watchdog part (which checks if the mule is running). dont set it too low because that's slow.
MULENAME=amule
MULE=`which ${MULENAME}`
NC=`which nc`
NICE=5
TCPPORT=4662
SLEEP=300

# test if amule/xmule does exist, and if nc does exist.
test -e ${MULE} || (echo "${MULE} not found. Dying"; exit 1)
test -e ${NC} || (echo "Netcat not found. Dying"; exit 1)


#wait some time, until most other programs have started - this way it doesnt slow down startup.
echo
echo "Welcome to the aMule/xMule start & control script."
echo "First we wait 30 seconds to ensure we are not slowing down other starting programs at boot."
echo
sleep 35


#start amule, with a higher nice (eg lower priority) so it doesnt slow down the system, even if it goes into loop (sucking much cpu).
echo "Ok, now we will start ${MULE}"
nice -n ${NICE} ${MULE} &

# aMule/xmule original watchdog
# Checks on aMule every 5 (configurable parameter) minutes
# and restarts it if aMule does not respond.
# Requires Netcat
#
# Created by Demiurg - demiurg@tau<.>ac<.>il (Alexander Sirotkin)
# Have fun.

# wait a min before attempting to check - amule must be ready starting and connecting to a server first.

echo "while the mule is starting up, we wait another minute to give it some time to get ready for the first checkup;-)"
sleep 60
echo "Ok, now we will start the watchdog and to the first check."

FIRSTLOOP=1

while true; do
       echo "Waiting"
        test ${FIRSTLOOP}  || sleep ${SLEEP}
        unset FIRSTLOOP
       echo "Checking if ${MULE} is running and not stalled"
        nc localhost ${TCPPORT} < /dev/null && continue
        echo "Restarting ${MULE}"
        date
        killall -9 ${MULENAME}
        sleep 2
        nice -n ${NICE} ${MULE} &
       echo "${MULE} is running again."
done


что непонятно:

Netcat - кто это такой и какие функции в скрипте выполняет
test - какие действия выполняет?
killall - скрипт (как и приложение) запускается от обычного пользователя. как сделать так, чтобы эта команда могла выполняться и не под рутом? (или скрипт пускать от рута а прогу запускать как su doka -c "amule" ??)
какое значение имеет использование изменения приоритета процесса (nice) во втором скрипте ?



--------------------------------------
взято отсюда
Never stop thinking..................................................................
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение Uncle_Theodore »

Doka писал(а):
31.10.2007 12:20
1) Netcat - кто это такой и какие функции в скрипте выполняет
2) test - какие действия выполняет?
3) killall - скрипт (как и приложение) запускается от обычного пользователя. как сделать так, чтобы эта команда могла выполняться и не под рутом? (или скрипт пускать от рута а прогу запускать как su doka -c "amule" ??)
4) какое значение имеет использование изменения приоритета процесса (nice) во втором скрипте ?

1) man nc обо всем хорошо расскажет. В данном скрипте он просто проверяет, слушает ли кто-нибудь на e-mule'овом порту.
2) Возвращает true или false в зависимости от верности или ложности (0 или 1) условия внутри. В данном случае, в зависимости от того, является переменная нулем или единицей.
3) Если процесс принадлежит пользователю, то и убить его может пользователь.
4) Экономит ресурсы системы. Не дает подвесить машину, если она сильно загружена. Как и написано в комментариях.
Спасибо сказали:
Аватара пользователя
Doka
Сообщения: 715
Статус: ASIC Design Engineer
ОС: RHEL4

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение Doka »

спасибо.

1) правильно лия понимаю данную строчку: nc localhost ${TCPPORT} < /dev/null && continue
- выполнять до тех пор, пока не освободился $TCPPORT, когда освободилсЯ- продолжать выполнение скрипта

2) test ${FIRSTLOOP} || sleep ${SLEEP}
- sleep ${SLEEP} - выполняется только если установлена в 1 переменная $FIRSTLOOP


>> 4) Экономит ресурсы системы. Не дает подвесить машину, если она сильно загружена. Как и написано в комментариях.
хотелось бы понять для себя - в чём экономия при понижении приоритета через nice, т.е. в каких случаях его целесообразно использовать?
у меня, например, аМуле выполняется на отдельной машине (не рабочей), но грузит процессор довольно прилично ( расчёт хэшей, интенсивные дисковые операции)
-имеет ли тогда смысл использовать понижение приоритета аМуле при запуске?
Never stop thinking..................................................................
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение drBatty »

Doka писал(а):
31.10.2007 15:18
хотелось бы понять для себя - в чём экономия при понижении приоритета через nice, т.е. в каких случаях его целесообразно использовать?
у меня, например, аМуле выполняется на отдельной машине (не рабочей), но грузит процессор довольно прилично ( расчёт хэшей, интенсивные дисковые операции)
-имеет ли тогда смысл использовать понижение приоритета аМуле при запуске?
Во первых спасибо за скрипты, я забыл где они лежат, а самому думать лень :) Тебе понижение приоритета не нужно. Если бы ты выполнял на этой машине другую работу, кроме мула, мул тебе мешал бы, особенно при хешировании. Поэтому приходится понижать приоретет мула. Грубо говоря, мул работает тогда, когда компютеру нечем занятся(99% времени).

ЗЫЖ А тебе удалось собрать и запустить мул без GUI и без графической оболочки? (что бы работал в обычной консоли без X)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Doka
Сообщения: 715
Статус: ASIC Design Engineer
ОС: RHEL4

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение Doka »

drBatty писал(а):
27.11.2007 11:38
ЗЫЖ А тебе удалось собрать и запустить мул без GUI и без графической оболочки? (что бы работал в обычной консоли без X)

да. удалось.
опции сборки для 2.2.3 такие:

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

../configure --disable-debug --enable-optimize --enable-amulecmd --enable-amule-daemon --enable-webserver --enable-cas --disable-gtk --disable-systray --disable-monolithic --disable-gtktest --disable-nls --disable-gtk2 --disable-wx --disable-gui --enable-amule-gui --enable-geoip --with-language=en_GB,ru

с таким конфигом он работает как демон, соответственно запуск его - amuled
утилитой cas проверяем его статус

очень удобно.. вроде есть еще удалённый GUI-клиент (--enable-amule-gui) и веб-интерфейс (--enable-webserver) но с ними не развлекался пока еще..

а так очень радует comand-line daemon - никаких скриптов не надо
Never stop thinking..................................................................
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение drBatty »

Doka писал(а):
22.01.2009 16:04
да. удалось.
мне тоже ;)
вот только ещё не пробовал удалённое ГУИ...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Doka
Сообщения: 715
Статус: ASIC Design Engineer
ОС: RHEL4

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение Doka »

ну, у меня ни удалённый гуи ни веб-интерфейс по невыявленной причине не работают((
хотя видно, что в процессах он висит:

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

$ ps aux | grep mule
doka     16153  0.0  0.0  89688   476 pts/2    S    20:07   0:00 amuleweb --amule-config-file=/home/doka/.aMule/amule.conf

поэтому юзаю cas для мониторинга того что происходит, а для подбрасывания в топку дров добавления новых e2dk-ссылок запускаю гуёвую сборку amule
Never stop thinking..................................................................
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение drBatty »

Doka писал(а):
22.01.2009 22:45
добавления новых e2dk-ссылок запускаю гуёвую сборку amule
возможно помогла-бы утилитка ed2k? я как-то через неё ссылки из firefox'а добавляю. не помню как именно, давно настроил.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение drBatty »

Doka писал(а):
22.01.2009 22:45
ну, у меня ни удалённый гуи ни веб-интерфейс по невыявленной причине не работают((
у меня - работают...
вот только с утилитой ed2k ещё не разобрался...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Doka
Сообщения: 715
Статус: ASIC Design Engineer
ОС: RHEL4

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение Doka »

drBatty писал(а):
28.01.2009 08:15
у меня - работают...
вот только с утилитой ed2k ещё не разобрался...

ссылка не открывается, но.. если работают amulegui & amuleweb (клиентская часть), то необходимость в утилите ed2k отпадает..

кстати, на сборке 2.2.3 (использовал wxWidgets 2.8.9 ) обратил внимание на аномальное поведение: графический amule работает куда устойчивее нежели демон командной строки amuled
(amuled вылетает почти сразу - вылетает после нескольких минут работы. сборка amuled 2.1.3 на wxWidgets 2.8.7 работала куда стабильней.. )

Код:

-------------------------------------------------------------------------------- A fatal error has occurred and aMule has crashed. Please assist us in fixing this problem by posting the backtrace below in our 'aMule Crashes' forum and include as much information as possible regarding the circumstances of this crash. The forum is located here: http://forum.amule.org/index.php?board=67.0 If possible, please try to generate a real backtrace of this crash: http://www.amule.org/wiki/index.php/Backtraces ----------------------------=| BACKTRACE FOLLOWS: |=---------------------------- Current version is: aMuled 2.2.3 using wxGTK2 v2.8.9 Running on: Linux 2.6.18-92.1.10.el5xen x86_64 [2] CamuleApp::OnFatalException() in :0 [3] wxFatalSignalHandler in :0 [4] ?? in /lib64/libpthread.so.0 [0x335e40de70] [5] Kademlia::CSearch::~CSearch() in :0 [6] Kademlia::CSearchManager::JumpStart() in :0 [7] Kademlia::CKademlia::Process() in :0 [8] CamuleApp::OnCoreTimer(CTimerEvent&) in :0 [9] wxEvtHandler::ProcessEventIfMatches(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) in :0 [10] wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*) in :0 [11] wxEvtHandler::ProcessEvent(wxEvent&) in :0 [12] wxEvtHandler::ProcessPendingEvents() in :0 [13] wxAppConsole::ProcessPendingEvents() in :0 [14] CamuleDaemonApp::OnRun() in :0 [15] wxEntry(int&, wchar_t**) in :0 [16] main in :0 [17] __libc_start_main in /lib64/libc.so.6[0x335d81d8b4] [18] __gxx_personality_v0 in :0 -------------------------------------------------------------------------------- Aborted

курение форума на который они ссылаются ( http://forum.amule.org/index.php?board=67.0 ) мало чем помогло..

( а началась эта эпопея с 2.2.3 с этого: *напортачил с либами )
Never stop thinking..................................................................
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение drBatty »

Doka писал(а):
28.01.2009 11:06
ссылка не открывается, но.. если работают amulegui & amuleweb (клиентская часть), то необходимость в утилите ed2k отпадает..
работают. amuleweb правда не проверил. amuled работает третьи сутки без сбоев
использую wxGTK2 v2.8.7 ставить другую не вижу смысла(да и собирать её всю ночь надо, на моём celeron3.16GHz)
ссылка не открывалась, были некоторые проблемы... теперь должна открываться. а вот с ed2k нужно что-то делать, хочется что-бы ссылка загружалась в 1 клик. А так GUI надо запускать, и туда её копировать. ed2k работала бы, но я сделал так, что amuled работает под специально созданным пользователем... не под тем, под которым запускается X и прочее.

про сбои: имхо нужно удалить 2.8.9, и пересобрать 2.8.7, а потом пересобрать амул
и ставить всё в /usr/local/ мой пакетный менеджер кстати ничего там не видит и ничего не удаляет оттуда...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Doka
Сообщения: 715
Статус: ASIC Design Engineer
ОС: RHEL4

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение Doka »

пересобрал wxW 2.8.7 и амул
ситуация не поменялась - так же падуч.. :(

единственное стали странные варнинги в конце сборки вылезать:

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

...
...
Compiling PartFile.cpp
Compiling Preferences.cpp
Compiling OtherFunctions.cpp
Linking amuled
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.so when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.a when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib/libbfd.a when searching for -lbfd
/usr/bin/ld: skipping incompatible /usr/lib/libiberty.a when searching for -liberty
/usr/bin/ld: skipping incompatible /usr/lib/libz.so when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib/libz.a when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib/libz.so when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib/libz.a when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib/libdl.so when searching for -ldl
/usr/bin/ld: skipping incompatible /usr/lib/libdl.a when searching for -ldl
/usr/bin/ld: skipping incompatible /usr/lib/libm.so when searching for -lm
/usr/bin/ld: skipping incompatible /usr/lib/libm.a when searching for -lm
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.so when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.a when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc
$





PS: на моём celeron 1.2GHz 64bit (conroe-L) конфиг и сборка wxWidgets 2.8.7 заняла 15минут.
опции:

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

./configure  --with-gtk  --disable-shared --enable-unicode --disable-compat24 --disable-compat26 --enable-optimise
Never stop thinking..................................................................
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение drBatty »

Doka писал(а):
01.02.2009 09:50
пересобрал wxW 2.8.7 и амул
ситуация не поменялась - так же падуч.
вы видимо не пересобрали. наверное в всё бралось из кеша, в котором были уже собраные компоненты.
и не слинковалось у вас ничего: вы же запретили расшаренные библиотеки, вот они и пропускаются. ИМХО так... точно сам не знаю, никогда такого не делал :)

Попробуйте полностью удалить все исходники, распаковать их заново и собрать по новой...


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

--disable-shared
вот это совсем непонятно, с какой целью....
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Doka
Сообщения: 715
Статус: ASIC Design Engineer
ОС: RHEL4

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение Doka »

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

 --disable-shared --enable-unicode

- это осталось от требований aMule 2.2.3 ( configure проверяет чтобы wxW был собран с этими опциям)


насчёт времени сборки:
пересобрал из другой директории:
время работы configure - 3минуты
make - 22минуты
Never stop thinking..................................................................
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: * cкрипт обнаружения зависания\падучести с автоперезапуском (+)

Сообщение drBatty »

Doka ну я не знаю, почему у вас так.

aMulecmd$ statistics

> Statistics > Uptime: 2 Days 15:52 hours

и падать как-то не собирается...

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

It was created by wxWidgets configure 2.8.7, which was
generated by GNU Autoconf 2.59.  Invocation command line was

  $ ./configure --prefix=/usr --with-gtk --enable-unicode --enable-optimise

попробую пересобрать...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Ответить