Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: globaluty в Apr 22, 2013, 22:13



Титла: Автоматично стартиране на процес, ако той е спрял
Публикувано от: globaluty в Apr 22, 2013, 22:13
Здравейте,

някой може ли да помогне със скрипт, който да проверява например на всеки 10 секунди дали даден процес е спрял и евентуално ако е спрял да го стартира отново. Ако естествено за подобно нещо се изисква скрипт и няма някаква вградена функция на Линукс.

Ипозлвам Linux/Debian. Помагайте!

Благодарности към отзовалите се.


Титла: Re: Автоматично стартиране на процес, ако той е спрял
Публикувано от: laskov в Apr 22, 2013, 22:18
Демонът init , конфиг файл /etc/inittab (предполагам) , опция respawn


Титла: Re: Автоматично стартиране на процес, ако той е спрял
Публикувано от: runtime в Apr 22, 2013, 23:22
daemontools ($2)?!?


Титла: Re: Автоматично стартиране на процес, ако той е спрял
Публикувано от: divak в 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 , ако няма стартира процеса, ако има - проверява за процес и тн.


Титла: Re: Автоматично стартиране на процес, ако той е спрял
Публикувано от: Ali Nebi в Apr 23, 2013, 13:54
Здравей,

би могъл да ползваш и 'monit'.


Титла: Re: Автоматично стартиране на процес, ако той е спрял
Публикувано от: ivanatora в Apr 23, 2013, 15:35
Това го слагаш във крона да върти през 10 сек.

Резолюцията на крона е 1 минута.

Може да завъртиш един безкраен цикъл:

[pseudocode]
do
    check if process is alive, restart it if not
    sleep 10 seconds
whie true
[/pseudocode]


Титла: Re: Автоматично стартиране на процес, ако той е спрял
Публикувано от: n00b в Apr 23, 2013, 20:00
Има и много по-прост начин...

Ако се стартира процес през bash продължението на скрипта СПИРА докато процеса не спре изпълнението си по един или по др. начин. Ето и готов работещ код:

Код:
while 1
do
/do/your/script
sleep 1
done


Титла: Re: Автоматично стартиране на процес, ако той е спрял
Публикувано от: Warstomp в 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