2010-06-07 4 views
0

Я написал программу, которая должна работать непрерывно. но так как я плохой программист, он падает каждый раз так часто. есть ли способ, чтобы другая программа смотрела его и перезапустила, когда он сработает?linux - проверьте, умерла ли программа

+6

Если он падает из-за плохого программирования, тогда попрактикуйтесь и станьте лучшим программистом и улучшите свою программу и дизайн, чтобы он не разбился. Тогда вам не придется проходить этот процесс. –

+2

К сожалению, боссы любят отправлять код этого качества. –

+1

@DeSimone - потому что дешевле сделать это дважды, чем сделать это в первый раз. – KevinDTimm

ответ

2

Не будь предусмотрительным, но если вы плохо программист, то, что сказать, ваше программирование на просмотр тоже не подведет;) И вам лучше поправиться, чтобы у вас не было этой проблемы (по этой причине). Тем не менее, вероятно, вам, вероятно, понадобится следующий ответ.

Однако, если улучшение становится невозможным, просто запустите задание cron с регулярными интервалами, ища имя вашей программы на выходе из «ps». И этот ответ вы можете получить от superuser.com

1

Нет необходимости в 3-й программы партии

Все это может быть достигнуто с Linux inittab

inittab MAN pages

Посмотрите на «возрождаются»

0

Поскольку Stackoverflow - это сайт программирования, позвольте мне дать вам обзор того, как такой наблюдатель будет реализован.

Первое, что нужно знать, это то, что ваш наблюдатель должен будет запустить наблюдаемую программу самостоятельно. Вы делаете это с fork и exec.

Что вы можете сделать, так это ждать выхода программы. Вы можете использовать системные вызовы ожидания (то есть wait, waitpid или wait4) в зависимости от ваших конкретных потребностей. Вы также можете поймать SIGCHLD, чтобы вы могли получать асинхронное сообщение, когда ваш ребенок выйдет (вам нужно будет позвонить wait, чтобы получить его статус).

Теперь, когда у вас есть статус, вы можете узнать, умер ли процесс из-за сигнала с помощью макроса WIFSIGNALED. Если этот макрос возвращает true, ваша программа разбилась и ее необходимо перезапустить.

1

Вы можете использовать supervisord

http://supervisord.org/

+0

+1, так как это используется Reddit, поэтому он должен быть наполовину приличным. –

0

Он по-прежнему не будет работать непрерывно, если у вас есть другая задача мониторинга его ... он все равно будет иметь короткий промежуток времени простоя, пока он перезагружается.

Кроме того, если вы действуете как сетевой (или локальный) серверный процесс, вы потеряете любое состояние о выполненных запросах; Я надеюсь, что это нормально (конечно, у ваших клиентов может быть встроенный тайм-аут и повторная попытка).

Наконец, если ваш процесс потерпел крах, это было в середине хранения каких-либо постоянные данных, я надеюсь, что это имеет механизм борьбы с половиной написанными файлами и т.д.

Однако, если вы собираетесь его быть все это должно быть правдивым, так что вы можете безопасно использовать что-то вроде супервизора.

0

Я использую Monit для просмотра своих программ и услуг.

Смежные вопросы