In developer’s way

Артём Скорецкий / tonnzor about IT & Hi-Tech

Автоматический перезапуск подвисшего сервера (сервиса)

Некоторые программы в Linux (например, P2P клиенты) не отличаются стабильностью — норовят самопроизвольно закрыться, подвиснуть, перестать работать наконец.

Что делать? Писать простой скрипт :)

После короткого изучения синтаксиса Bash и получаса отладки получаем скрипт для автоматического перезапуска подвисшего сервера (сервиса) на примере Ktorrent:

#!/bin/bash
progname='ktorrent'
sleep_seconds=60
while true; do
  line=`ps -a | grep $progname` # Check program in processes list
  if [ "$line" == "" ]; then
    echo "Process $progname is not started - starting"
    $progname   # Start the program
  else
    line=`netstat -l -n -p 2>nul | grep $progname`  # Check program opened at least one port
    if [ "$line" == "" ]; then
      echo "No listers for $progname - restart"
      killall $progname # Restart the program
      $progname     # Restart the program
    fi
  fi
  sleep $sleep_seconds
done

В случае, если сервер (например, Apache) запущен под другим пользователем, то нужно изменить команды проверки запущенности, запуска и перезапуска. Например, для Apache2.2 этот же скрипт будет выглядеть следующим образом:

#!/bin/bash
progname='apache2'
sleep_seconds=60
while true; do
  line=`ps -A | grep $progname` # CHANGED
  if [ "$line" == "" ]; then
    echo "Process $progname is not started - starting"
    $progname -k start          # CHANGED
  else
    line=`netstat -l -n -p 2>nul | grep $progname`
    if [ "$line" == "" ]; then
      echo "No listers for $progname - restart"
      $progname -k restart      # CHANGED
    fi
  fi
  sleep $sleep_seconds
done

P.S. В связи с особенностями работы netstat и apache2 последний скрипт придётся запускать под суперпользователем.

2 Comments so far

  1. tonnzor April 3rd, 2008 00:23

    I can translate it into English if you need. ;-)

  2. tonnzor April 3rd, 2008 00:31

    You can also look at aMule restart script

Leave a reply