Общий дизайн Daemon / Server - лучшие практики (C / C ++, Linux) - PullRequest
5 голосов
/ 20 августа 2011

Эти вопросы носят довольно общий характер, поскольку они продолжают возникать у меня в разных ситуациях.Я надеюсь, что есть некоторые основные принципы / стандартные практики.

Типичные требования:

  1. Программа, которая работает как "сервер", работает в Linux в фоновом режиме (иработает почти без остановок, перезапускается, возможно, ежедневно или еженедельно)
  2. Обрабатывает клиентские подключения через некоторый протокол сокетов
  3. Имеет файлы конфигурации запуска
  4. Выводится в один или несколько файлов журнала

Мои вопросы:

  1. Должен ли я написать программу как "демон"?Что следует учитывать при выборе маршрута «демон-демон», а не «маршрут-демон»?
  2. Где в иерархии папок linux должны находиться файлы журналов и файлы конфигурации?Должен ли я запустить его из домашнего каталога какого-либо пользователя или подпапки в домашнем каталоге какого-либо пользователя?Или, может быть, я должен создать новую папку, т.е. / my_server_abc /, а затем запустить ее оттуда, записывая также файлы журналов в этот каталог?

Спасибо

Ответы [ 4 ]

2 голосов
/ 29 марта 2016
  1. Должен ли я написать программу как "демон"?

Нет.

Не пытайтесь демонизировать себя.Используйте предоставленные ОС инструменты, чтобы приложение запускалось в фоновом режиме из сценария запуска, например start-stop-daemon в Debian / Ubuntu.Systemd и upstart также могут обработать это для вас в своих скриптах запуска, как и большинство систем инициализации в наши дни.

При написании демона есть некоторые подводные камни, которые вы можете не ожидать, и большинство современных скриптов init не ожидают, что выотправьте свой собственный процесс на задний план - который все равно усложнит их работу.Это позволяет, например, создавать надежные .pid файлы для отслеживания идентификатора процесса вашего приложения.Если вы демонизируете себя, ваша система инициализации должна полагаться на ваше приложение для правильной передачи идентификатора вашего процесса, поскольку вы генерируете новые PID, которые система инициализации не может отслеживать.Это усложняет вещи как для них, так и для вас.

1 голос
/ 20 августа 2011
0 голосов
/ 20 августа 2011

Я знаю, что вы думаете c / c ++, когда задаете этот вопрос, но я думаю, что он более общий, и логика, используемая при проектировании, не зависит от языка, используемого для реализации.

Существует предложение по улучшению Python ( PEP 3143 ), которое использовалось для описания стандартной библиотеки процессов демона, которая теперь стала частью языка. Если вы посмотрите в этот раздел о правильном поведении демона, он описывает, как демон должен действовать. Есть также соображения о различиях между «сервисом» и демоном.

Я думаю, что это должно хорошо ответить на ваши общие вопросы о демонах и их поведении. Проверьте W. Домашняя страница Ричарда Стивенса , и вы можете найти информацию о «Сетевом программировании Unix», Prentice Hall, в которой есть больше информации, специфичной для c / c ++, при кодировании демонов в среде * nix и передовой практике.

0 голосов
/ 20 августа 2011

Вы должны написать настоящий демон (форк для фонового выпуска tty).Это облегчает запуск программного обеспечения при запуске системы. Это лучший способ.

Для ведения журналов следует хранить журналы в месте по умолчанию: /var/log.Возможно, вы даже захотите использовать syslog для ведения журнала, так как это значение по умолчанию в Linux, и вам не нужно заботиться об обработке файла журнала.

...