C # (Mono): перезапуск процесса при сбое программы - PullRequest
2 голосов
/ 24 сентября 2011

Я довольно новичок в работе в Mono и хотел бы знать, как заставить принудительно запускать консольное приложение при исключении в среде Linux. Как бы я поступил так?

Ответы [ 3 ]

4 голосов
/ 24 сентября 2011

Если процесс умирает, вы можете использовать что-то вроде Monit , чтобы запустить его. Краткое описание:

Monit может запустить процесс, если он не запущен, перезапустить процесс, если он не отвечает, и остановить процесс, если он использует слишком много ресурсов.

Как правило, кодирование приложения для «возможности перезапуска» никогда не бывает достаточно надежным. Если кто-то прервет приложение, используя kill -9, ваше приложение не сможет ответить на это. Таким образом, требуется какой-то тип демона или сторожа.

0 голосов
/ 24 сентября 2011

Я рекомендую это перенести в суперпользователя.

В Mono нет ничего, что вы хотели бы использовать. Вы можете создать приложение Watchdog в Mono, которое будет проверять и гарантировать, что ваш процесс всегда запущен, но для этого уже есть множество сценариев и приложений Linux. Monit является примером.

Или вы можете зайти в /etc/inittab и найти строки под названием респаун и добавить туда своего демона. init гарантирует, что процесс всегда работает.

Вот пример сценария запуска демона для Java, который вы можете изменить для моно. http://shrubbery.homeip.net/c/display/W/Java+Daemon+Startup+Script

0 голосов
/ 24 сентября 2011

Я не уверен, что это будет работать под Linux, так как я никогда не использовал Mono, но я попробую подключиться к событию Process.Exited.(Я предполагаю, что вы запускаете ваше приложение с классом Process)

Process.Exited http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exited.aspx

Так что вы можете сделать что-то вроде ...

-Запустить процесс - подключиться к завершённому событию

- дождаться, пока вышедшее событие не будет вызвано

- запустить процесс - подключиться к завершённому событию

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...