Назад | Перейти на главную страницу

Лучшие практики для демонов Linux

Я искал информацию о запуске фоновых процессов в Linux. Основные требования:

Кроме того, некоторые процессы нужно запускать не постоянно, а периодически. Это, конечно, работа для cron, и, скорее всего, я буду использовать ее для этого. Но для непрерывных процессов это другое дело.

В Mac OS X для этой цели я использую launchd. Launchd - это канонический метод для запуска процессов в Mac OS X. Операционная система использует его для ВСЕХ системных служб, поэтому я не сомневаюсь, что полагаюсь на него. Для Linux пока не нашел подобной системы. У всех разных дистрибутивов, похоже, есть свои собственные методы (выскочка Ubuntu и т. Д.), И я до сих пор не могу найти прямого ответа о том, как /etc/rc.local, /etc/init.d/rc.local, / etc / initd /rc.local или / etc / init все связаны и в чем разница между ними. Они разные в каждой системе. Добавьте к этому тот факт, что «запуск / остановка службы x» не работает во всех системах (и Google здесь не помог), и вы получите то, что я бы назвал беспорядком.

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

Это вообще возможно?

К сожалению, дистрибутивы Linux (в своем бесконечном стремлении выделиться и усложнить жизнь системным администраторам) стандартизировали каждый запуск по-своему.

Наиболее близким к «стандарту кросс-распространения» для сценариев запуска Linux был бы Уровни выполнения в стиле System V. Они устарели в некоторых системах (например, официальная позиция Ubuntu - вы должны использовать Upstart), но они по-прежнему работают и, вероятно, будут работать еще долгое время.

Сценарии инициализации SysV не обрабатывают «автоматический перезапуск» в случае сбоя вашего демона - они запускают демон, который, как ожидается, позаботится о себе сам.
Если вам нужен супервизор, вам нужно будет написать / включить свою собственную структуру супервизора.
(В качестве альтернативы просто напишите приличную программу, которая не дает сбоев, что является традиционным способом решения этой проблемы в Unix. Если ваш демон настолько нестабилен, что ему требуется дополнительный контроль, чтобы продолжать его перезапуск, это обычно означает, что вам нужно выполнять больше работы по приданию качеству продукции.)

Вы были близки с выскочкой - вам нужен systemd. Он еще не полностью поддерживается, но обрабатывает сценарии инициализации SysV старого стиля (хотя и без надзора) и может быть легко адаптирован для работы на многих дистрибутивах. На данный момент нет лучшего решения, доступного из коробки, но если вы предпочитаете не менять весь init, вас может заинтересовать демон monit, который можно легко проинструктировать для наблюдения почти за любой службой.

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

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

  • SysVInit: Red Hat Enterprise Linux 5, SUSE Linux Enterprise 11.
  • Выскочка: Red Hat Enterprise Linux 6
  • Systemd: Red Hat Enterprise Linux 7, SUSE Linux Enterprise 12.

Наиболее «совместимый» способ - это писать сценарии sysvinit, поскольку их поддерживают и upstart, и systemd. Однако он не поддерживает автоматический перезапуск служб в случае их смерти. И выскочка, и systemd это поддерживают.