Автоматический перезапуск подвисшего сервера (сервиса)
Некоторые программы в 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
Leave a reply
I can translate it into English if you need.
You can also look at aMule restart script