Как использовать сторожевой таймер программного обеспечения для Linux
Привет, кто-нибудь скажет мне, как обращаться с программным сторожевым плеером в linux. У меня есть программа SampleApplication, которая работает непрерывно, и мне нужно перезапустить ее, если она зависает или закрывается неожиданно.
Я искал эту информацию и нашел, что у linux есть сторожевой таймер в /dev/watchdog, но не знаю, как его использовать. Может кто-нибудь помочь мне с примером.
Мой вопрос заключается в том, где я должен указать свое имя приложения и интервал задержки для перезапуска. Поскольку я новичок в Linux, пожалуйста, сообщите мне, если возможно, образец. Благодаря
Ответы
Ответ 1
Большинство программ Unix/Linux init
будут управлять демонами для вас и перезапускать их. Посмотрите на размещение своего сервиса в /etc/inittab
. Или вы можете использовать Upstart
или systemd
.
Все эти программы выполняются как PID 1
, и их задачей является мониторинг и перезапуск системных процессов.
Из вашего тега Busybox я предполагаю, что вы используете встроенную систему. На них скрипты инициализации стиля System V со всеми их сценариями оболочки действительно переполнены. Вы должны, вероятно, разорвать все это и заменить его на записи в /etc/inittab
или выскочки или системные задания.
Ответ 2
Поскольку модераторы игнорируют пост-улучшения, теперь мне придется публиковать его отдельно
Наблюдатель программного обеспечения linux перезагрузит компьютер, а не просто перезагрузит ваш процесс.
Ну, это просто неправда, очень возможно перезапустить один или несколько процессов после сигналов сторожевого таймера, что системы висят - вы даже можете обойти перезагрузку или выполнить SOFT-перезагрузку, можно настроить "тест" "и" repair "-scripts/binaries, которые делают все, что вы хотите от них делать. Занятая бокс-версия сторожевого пса урезана до почти непригодного уровня... Я думаю, мир никогда не узнает, почему busybox-разработчики решили отказаться от основных функций - на данный момент было бы лучше избегать busybox вообще → улучшения скорости почти не существуют, уменьшение размера не компенсирует огромную потерю функциональности. /bin/ bash является довольно небольшим - перекомпилируйте все с флагом" -O", если размер имеет значение, и вам хорошо идти - сторожевой таймер, который позволяет почти все, что можно было бы хотеть.
О, и ПОЖАЛУЙСТА, НЕ создавайте свой собственный сторожевой таймер - это, скорее всего, оставит вас с необработанными ошибками и сделает вашу жизнь плохой день.
Ответ 3
Как насчет использования cron? Настройте небольшое задание cron, которое запускается каждую минуту. Проверьте, работает ли ваше приложение (с использованием ps), а если нет, перезапустите его.
Сделайте крошечный script следующим образом:
#!/bin/bash
if [ ! "$(pidof myapp)" ]
then
/path/to/myapp &
fi
Вы проверяете, включен ли "myapp" в списке процессов. "!" отменяет тест. Если он не существует, он запускает "myapp". "& Амп;" просто так начинается в фоновом режиме.
Добавьте это в cron. В зависимости от вашей системы и предпочтений есть несколько способов сделать это. Классическим является использование crontab. Там много документации о том, как указать вашу линию crontab, но вы, вероятно, хотите что-то вроде этого:
* * * * * /path/to/the/script.sh > /dev/null
Это будет проходить ваш тест каждую минуту каждого часа каждого... Вы получаете идею.
Ответ 4
Используйте /etc/inittab
, вы можете использовать его для запуска на определенных уровнях выполнения, и если он будет убит, он должен быть перезагружен автоматически
n:2345:respawn:/path/to/app
Это заставит его респанировать в уровнях 2345 запуска, вам, вероятно, потребуется только 3 и 5, но это будет прекрасно работать и встроено в Linux.
Ответ 5
Документация для сторожевого пса здесь: http://linux.die.net/man/8/watchdog
Но похоже, что это не то, что вы хотите. Контроллер сторожевого таймера Linux перезагрузит компьютер, а не просто перезапустит процесс.
Вы можете легко создать свой собственный сторожевой таймер. Например, вы могли бы периодически записывать временный файл вашей программы и запускать script, который проверяет файл один раз в то время и перезапускает ваш процесс, если он не обновляется некоторое время.
Ответ 6
Если вы используете systemd, есть 2 сторожевых таймера: один для аппаратного обеспечения (с использованием systemd.conf или с использованием демона сторожевого таймера) и один для демонов, инициализированных как службы.
Если systemd - это ваш вариант, посмотрите на следующее:
http://0pointer.de/blog/projects/watchdog.html
Ответ 7
Если кто-то прибыл на эту страницу и ищет сторожевой таймер операционной системы (который не является тем, чего хочет OP), это то, что вам нужно:
sudo apt-get install watchdog
service watchdog status
service watchdog start
Чтобы убедиться, что он работает, выполните:
tail -f /var/log/syslog | grep watchdog
Вы должны увидеть что-то вроде:
Jul 25 22:03:35 nuc watchdog[14229]: still alive after 733 interval(s)
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 734 interval(s)
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 735 interval(s)
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 736 interval(s)
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 737 interval(s)
Надеюсь, я правильно отвечу на вопрос. Все остальные ответы кажутся очень разными.
Ответ 8
Вы можете попробовать wdog, который является утилитой, написанной на С++ и связанной с картой Kahless_9. Исходный код для этого можно скачать с помощью: https://github.com/zepher999/wdog и, следовательно, обновить, чтобы удовлетворить ваши собственные потребности. Есть все еще некоторые изменения списка TODO, необходимые для будущего, но так как это должно удовлетворять вашим текущим требованиям.
Утилита требует наличия файла csv в качестве ввода, в котором содержатся все процессы, которые будут отслеживаться с их аргументами. При запуске утилита запускает все эти процессы, указанные в файле csv, и контролирует их для выхода/завершения, после чего перезапускает процесс.
В настоящее время wdog позволяет останавливать/убивать контролируемые процессы, а также возможность запуска утилиты в горячем или холодном режиме. Горячий режим позволяет утилите использовать кэшированные записи для мониторинга уже запущенных процессов, тогда как запуск холодного режима отбрасывает такие кешированные значения, тем самым пытаясь запустить все процессы.
Утилита также имеет возможность запускать экземпляр самого себя, чтобы контролировать себя, тем самым имея сторожевого таймера для сторожевого пса.