Пока проверяется файловая система на моем сервере, я решил написать короткую заметку о том, как автоматически перезапускать демон на под линуксом.
Метод крайне топорный, но работает.
Два ограничения:
- Максимальное время простоя - 1 минута. Т.е., в худшем случае, демон будет зависший/отключенный/etc в течение минуты.
- Вы должны знать команду, которая в случае работы демона вернет какую-либо строку, а если нужен перезапуск - не вернет.
Я использую этот метод для автоматического перезапуска отваливающегося winbind'а и уходящего в астрал 1С сервера под Linux.
Важное замечание! Прежде чем использовать этот топорный или какой-то другой прекрасный метод перезапуска демона, попробуйте сделать так, чтобы перезапуска не требовалось вообще (это я для случая, когда демона выбивает) - почитайте логи, погуглите и решите проблему в корне.
С теорией все, займемся практикой.
Метод, который я использую, заключается в ежеминутном запуске скрипта, который проверяет наличие демона и, если его нет, перезапускает службу.
Создаем файл /usr/local/sbin/mydaemon.check (для winbind):
Здесь команда /usr/bin/wbinfo -u | grep -q v.shokov запрашивает в домене всех пользователей, проверяет - есть ли там пользователь v.shokov (считаем, что он есть всегда) и, если возвращается пустая строка, то winbind перезапускается.
Можно сделать проверку на существование процесса - /bin/ps -A | grep -q winbind или, например, статус службы - /etc/init.d/winbind status | grep -q winbindd.
Важно лишь, чтобы команда как можно меньше грузила систему и, если служба нуждается в перезапуске, - возвращала пустую строку, а если не нуждается - то возвращала хоть что-то.
Теперь добавляем задание в /etc/crontab
И перезапускаем cron. Собственно, все.