Я написал программу, которая должна работать непрерывно. но так как я плохой программист, он падает каждый раз так часто. есть ли способ, чтобы другая программа смотрела его и перезапустила, когда он сработает?linux - проверьте, умерла ли программа
ответ
Не будь предусмотрительным, но если вы плохо программист, то, что сказать, ваше программирование на просмотр тоже не подведет;) И вам лучше поправиться, чтобы у вас не было этой проблемы (по этой причине). Тем не менее, вероятно, вам, вероятно, понадобится следующий ответ.
Однако, если улучшение становится невозможным, просто запустите задание cron с регулярными интервалами, ища имя вашей программы на выходе из «ps». И этот ответ вы можете получить от superuser.com
Нет необходимости в 3-й программы партии
Все это может быть достигнуто с Linux inittab
Посмотрите на «возрождаются»
Поскольку Stackoverflow - это сайт программирования, позвольте мне дать вам обзор того, как такой наблюдатель будет реализован.
Первое, что нужно знать, это то, что ваш наблюдатель должен будет запустить наблюдаемую программу самостоятельно. Вы делаете это с fork
и exec
.
Что вы можете сделать, так это ждать выхода программы. Вы можете использовать системные вызовы ожидания (то есть wait
, waitpid
или wait4
) в зависимости от ваших конкретных потребностей. Вы также можете поймать SIGCHLD
, чтобы вы могли получать асинхронное сообщение, когда ваш ребенок выйдет (вам нужно будет позвонить wait
, чтобы получить его статус).
Теперь, когда у вас есть статус, вы можете узнать, умер ли процесс из-за сигнала с помощью макроса WIFSIGNALED
. Если этот макрос возвращает true, ваша программа разбилась и ее необходимо перезапустить.
Вы можете использовать supervisord
+1, так как это используется Reddit, поэтому он должен быть наполовину приличным. –
Он по-прежнему не будет работать непрерывно, если у вас есть другая задача мониторинга его ... он все равно будет иметь короткий промежуток времени простоя, пока он перезагружается.
Кроме того, если вы действуете как сетевой (или локальный) серверный процесс, вы потеряете любое состояние о выполненных запросах; Я надеюсь, что это нормально (конечно, у ваших клиентов может быть встроенный тайм-аут и повторная попытка).
Наконец, если ваш процесс потерпел крах, это было в середине хранения каких-либо постоянные данных, я надеюсь, что это имеет механизм борьбы с половиной написанными файлами и т.д.
Однако, если вы собираетесь его быть все это должно быть правдивым, так что вы можете безопасно использовать что-то вроде супервизора.
Я использую Monit для просмотра своих программ и услуг.
- 1. PHP - Проверьте, запущена ли программа
- 2. Проверьте, не прописана ли программа
- 3. Проверьте, существует ли программа из сценария python
- 4. Проверьте, открыт ли сокет в linux
- 5. Проверьте, запущена ли программа через другую.
- 6. MFC - Проверьте, существует ли программа Microsoft Word
- 7. Python/win32com - Проверьте, открыта ли программа
- 8. Проверьте, работает ли программа по пути-исполнителю
- 9. Проверьте, правильно ли используется программа MPI (распределенная)?
- 10. Проверьте, не вызвала ли программа исключение
- 11. Проверьте, установлена ли программа в C
- 12. Проверьте, работает ли программа в режиме отладки
- 13. Асинхронная петля умерла! org.zeromq.ZMQException
- 14. Ruby: Проверьте, установлена ли программа на удаленном хосте Windows
- 15. Программа C под Linux: как узнать, запущена ли другая программа
- 16. Проверьте, существует ли файл Linux bash
- 17. Linux - проверьте, есть ли строка в списке
- 18. Проверьте, существует ли файл в сценарии linux
- 19. PHP Проверьте, запущен ли процесс (Linux)
- 20. программа Linux в FreeBSD
- 21. Storm [ERROR] Асинхронная петля умерла
- 22. Как поймать, когда служба умерла?
- 23. ОШИБКА Асинхронная петля умерла! org.zeromq
- 24. Проверьте, подключено ли lan-устройство с использованием C++ в linux
- 25. Проверьте в Bash/Linux
- 26. последовательные порты linux - программа mulithread
- 27. Программа Последовательность выполнения в Linux
- 28. Ссылка на проверку инструмента умерла в рубине
- 29. Linux-сокет и многопоточная программа
- 30. Проверьте, не установлена ли программа установки Uninstallable = True?
Если он падает из-за плохого программирования, тогда попрактикуйтесь и станьте лучшим программистом и улучшите свою программу и дизайн, чтобы он не разбился. Тогда вам не придется проходить этот процесс. –
К сожалению, боссы любят отправлять код этого качества. –
@DeSimone - потому что дешевле сделать это дважды, чем сделать это в первый раз. – KevinDTimm