Эксплуатация сервера в виде фонового процесса

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

  • эксплуатация сервера в виде фонового процесса (демона);
  • закрытие унаследованных дескрипторов файлов;
  • отключение сервера от его управляющего терминала;
  • перемещение сервера в безопасный, известный каталог;
  • установка маски umask системы Linux;
  • перевод сервера в приватную группу процессов;
  • открытие трех стандартных дескрипторов ввода/вывода;
  • обеспечение взаимно исключающего выполнения;
  • регистрация идентификатора процесса сервера;
  • ожидание завершения дочерних процессов;
  • игнорирование посторонних сигналов;
  • применение системы syslog для обработки сообщений об ошибках.
Материал для дальнейшего изучения

Многие правила, применяемые при разработке серверов для системы Linux, основаны из общепринятых рекомендациях и проверены на практике; программисты часто изучают методы на примере существующих программ. В литературе [151] рассматривается разработка программ, функционирующих в качестве демонов, и подробно описаны некоторые методы, представленные в настоящей главе.

  1. Разработайте процедуру daemonize, которая включает код реализации всех методов, рассматриваемых в настоящей главе.
  2. Прочитайте о сигналах в оперативном руководстве Linux. Какие сигналы не могут быть проигнорированы? Что произойдет, если сервер получит один из них?
  3. Некоторые программисты предусматривают возможность корректного завершения работы сервера после получения им специального сигнала (например, SIGHUP). Это позволяет системному администратору завершить работу сервера, отправив ему соответствующий сигнал. Как может администратор послать такой сигнал, если сервер отключился от управляющего терминала?
  4. По условиям предыдущего упражнения ответьте, имеет ли право непривилегированный пользователь завершить работу сервера, передав ему соответствующий сигнал?
  5. В приведенном здесь примере кода закрываются все дескрипторы файлов, а затем снова открываются стандартные устройства ввода данных, вывода данных и вывода сообщений об ошибках. В некоторых серверных программах эти три дескриптора остаются открытыми со значениями, унаследованными от их родительских процессов. В чем состоят преимущества и недостатки такого подхода? (Подсказка: учтите, что необходимо выполнять регистрацию сообщений об ошибках).
  6. Большинство серверов функционируют с правами пользователя root (в системе Linux пользователь root обладает неограниченными правами). С чем может быть связана необходимость эксплуатировать сервер с меньшими правами? Как это можно сделать?
  7. Напишите серверную программу, в которой для обеспечения взаимоисключения используется системная функция creat операционной системы Linux. (Подсказка: этот метод общеизвестен и широко используется, особенно в старых программах UNIX).
  8. Сравните способы взаимоисключения с применением функции creat (см. предыдущее упражнение), опции 0_EXCL в вызове функции open и функции rename. Какой из этих трех методов является наиболее приемлемым? Почему?
  9. Изучите исходный код одного из производственных серверов. Какие в нем применяются методы, описанные в настоящей главе? Используются ли в нем другие методы?
  10. Прочитайте справочное руководство Linux o программе syslogd. Как может системный администратор изменить конфигурацию после запуска сервера? Можете ли вы предложить другой вариант?
Похожие статьи Меню Опрос Фото Популярное
rss