Автор Тема: Автоматично стартиране на процес, ако той е спрял  (Прочетена 1293 пъти)

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Здравейте,

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

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

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

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Демонът init , конфиг файл /etc/inittab (предполагам) , опция respawn
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

runtime

  • Напреднали
  • *****
  • Публикации: 807
  • Distribution: Ubuntu 14.04
  • Window Manager: Unity
  • LZ1DOT
    • Профил
    • WWW
Активен

divak

  • Напреднали
  • *****
  • Публикации: 830
    • Профил
Общо решение :

Код:
#!/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
    • Профил
Здравей,

би могъл да ползваш и 'monit'.
Активен

Не се задоволявай да бъдеш дим, когато можеш да бъдеш огън!

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
Това го слагаш във крона да върти през 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.
    • Профил
Има и много по-прост начин...

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

Код:
while 1
do
/do/your/script
sleep 1
done
Активен

mobilio - професионални мобилни приложения

Warstomp

  • Напреднали
  • *****
  • Публикации: 344
  • Distribution: Debian, Ubuntu
    • Профил
Ето това е нашия скрипт под 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
Активен