Linux-BG
Начало
Помощ
Търси
Календар
Вход
Регистрирай
Добре дошъл/дошла,
Гост
. Моля,
въведи своето потребителско име
или
се регистрирай
.
Влез с потребителско име, парола и продължителност на сесията
Linux за българи: Форуми
>
Linux секция за начинаещи
>
Настройка на програми
>
Автоматично стартиране на процес, ако той е спрял
Страници: [
1
]
Надолу
« назад
напред »
Изпечатай
Автор
Тема: Автоматично стартиране на процес, ако той е спрял (Прочетена 2549 пъти)
globaluty
Напреднали
Публикации: 96
Автоматично стартиране на процес, ако той е спрял
«
-:
Apr 22, 2013, 22:13 »
Здравейте,
някой може ли да помогне със скрипт, който да проверява например на всеки 10 секунди дали даден процес е спрял и евентуално ако е спрял да го стартира отново. Ако естествено за подобно нещо се изисква скрипт и няма някаква вградена функция на Линукс.
Ипозлвам Linux/Debian. Помагайте!
Благодарности към отзовалите се.
Активен
laskov
Напреднали
Публикации: 3182
Re: Автоматично стартиране на процес, ако той е спрял
«
Отговор #1 -:
Apr 22, 2013, 22:18 »
Демонът init , конфиг файл /etc/inittab (предполагам) , опция respawn
Активен
Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява. Наздраве!
runtime
Напреднали
Публикации: 807
Distribution: Ubuntu 14.04
Window Manager: Unity
LZ1DOT
Re: Автоматично стартиране на процес, ако той е спрял
«
Отговор #2 -:
Apr 22, 2013, 23:22 »
daemontools
?!?
Активен
divak
Напреднали
Публикации: 831
Re: Автоматично стартиране на процес, ако той е спрял
«
Отговор #3 -:
Apr 23, 2013, 12:30 »
Общо решение :
Код:
#!/bin/bash
# check daemon
ps -ef | grep -v grep | grep daemon
# if not found - equals to 1, start it
if [ $? -eq 1 ]
then
/sbin/init.d/daemon start
else
echo "eq 0 - daemon found - do nothing"
fi
Това го слагаш във крона да върти през 10 сек.
Иначе може и по-интелигентно да си го направиш ...проверява за PID , ако няма стартира процеса, ако има - проверява за процес и тн.
Активен
Ali Nebi
Напреднали
Публикации: 394
Distribution: Centos, Debian, Fedora, Ubuntu
Window Manager: Gnome
Re: Автоматично стартиране на процес, ако той е спрял
«
Отговор #4 -:
Apr 23, 2013, 13:54 »
Здравей,
би могъл да ползваш и 'monit'.
Активен
Не се задоволявай да бъдеш дим, когато можеш да бъдеш огън!
ivanatora
Напреднали
Публикации: 658
Distribution: Ubuntu 10.04
Window Manager: Fluxbox
Re: Автоматично стартиране на процес, ако той е спрял
«
Отговор #5 -:
Apr 23, 2013, 15:35 »
Цитат на: divak в Apr 23, 2013, 12:30
Това го слагаш във крона да върти през 10 сек.
Резолюцията на крона е 1 минута.
Може да завъртиш един безкраен цикъл:
[pseudocode]
do
check if process is alive, restart it if not
sleep 10 seconds
whie true
[/pseudocode]
Активен
n00b
Напреднали
Публикации: 1248
Distribution: OSX
Window Manager: 10.6, 10.8, 10.9
Live to hack, hack to live.
Re: Автоматично стартиране на процес, ако той е спрял
«
Отговор #6 -:
Apr 23, 2013, 20:00 »
Има и много по-прост начин...
Ако се стартира процес през bash продължението на скрипта СПИРА докато процеса не спре изпълнението си по един или по др. начин. Ето и готов работещ код:
Код:
while 1
do
/do/your/script
sleep 1
done
Активен
mobilio - професионални мобилни приложения
Warstomp
Напреднали
Публикации: 344
Distribution: Debian, Ubuntu
Re: Автоматично стартиране на процес, ако той е спрял
«
Отговор #7 -:
Apr 24, 2013, 15:14 »
Ето това е нашия скрипт под FreeBSD, който следи за spamd демона и го пуска ако не работи, като пише и в лог файл. Само трябва да си заместиш съответните полета и sleep да си го сложиш на 10. Пътищата вероятно са различни за Debian. Стартираш скрипта със & накрая.
Код:
#!/bin/sh
prefix=/usr/local/
exec_prefix=${prefix}
logdir=${prefix}
PATH=${exec_prefix}/bin:/bin:/usr/bin:/sbin:
export PATH
programbinary="/usr/local/bin/spamd"
programstart="/usr/local/etc/rc.d/sa-spamd start"
startProgram () {
echo "Running: $programstart"
echo "Startup: `date`" >> /var/log/spamd_watch.log
$programstart >> /var/log/spamd_watch.log 2>&1 &
}
testProgram () {
Program="true"
ps -ax|grep -v grep|grep $programbinary >> /dev/null
if [ $? -eq 1 ] ; then
Program="false"
fi
export Program
}
failcount=0
start=`date '+%s'`
while : ; do
testProgram
if [ $Program = "false" ]; then
laststart=$start
start=`date '+%s'`
startProgram
t=`expr $start - $laststart`
if test 0 -le $t -a $t -lt 15 ; then
failcount=`expr $failcount + 1`
else
failcount=0
fi
if test $failcount -gt 5 ; then
echo "RunProgram: EXITING DUE TO REPEATED, FREQUENT FAILURES" >&2
exit 1
fi
fi
sleep 30
done
Активен
Страници: [
1
]
Нагоре
Изпечатай
« назад
напред »