Системные зависимости и порядок загрузки

20

Мне нужно указать порядок загрузки для запуска процессов. У меня 389 Directory Server и Samba, работающие на Fedora 18. Как я могу загрузить сетевые службы, затем 389 DS, затем Samba? Есть ли графический интерфейс для управления этим в Fedora?

Я включил Samba для начала systemctl enable smb.service. Я также включил 389 DS с systemctl enable dirsrv.target.

Дилан Кломпаренс
источник
Systemd не требует порядка между сервисами, идея состоит в том, чтобы запускать все параллельно и передавать соединения серверам по мере их появления. Конфигурация, заданная установкой по умолчанию, должна быть в порядке. Как вы думаете, почему вы должны определить заказ? Что-то не работает?
vonbrand
Я также должен отметить, что, поскольку это вновь подтвердилось, вам не следует запускать службы файлов / печати на контроллере домена.
Майкл Хэмптон
@vonbrand У меня была эта проблема, когда моему DHCP-серверу был нужен slapd (потому что его конфигурация хранилась в каталоге LDAP). Если это не так, сервер DHCP не будет работать.
Мат

Ответы:

25

Используйте systemctl edit smb.serviceдля обновления зависимостей.

After=dirsrv.target - Убедитесь, что smb.service запущен после dirsrv.target.

Для надежности (что будет полезно, если вы возитесь с этим), вы также можете включить некоторые из следующих элементов:

Requires=dirsrv.target- Активируйте dirsrv.target, когда smb.service активирован. В случае сбоя dirsrv.target произойдет сбой smb.service.

Wants=dirsrv.target- Активируйте dirsrv.target, когда smb.service активирован. Не приведет к сбою smb.service в случае сбоя dirsrv.target.

BindsTo=dirsrv.target - Если dirsrv.target деактивирован, деактивируйте smb.service.

Источник: http://www.freedesktop.org/software/systemd/man/systemd.unit.html

systemd-uiпредоставляет графический интерфейс для systemd. Дает хороший обзор состояния systemd, но вам все равно придется использовать текстовый редактор для изменения файлов модулей.

Гай Гангеми
источник
В случае, если требуется B , что скажет "B" потерпел неудачу, так что A не будет запущен? Программа B возвращает ненулевое значение?
Джон Ван
2
Понижен, потому что это советует плохую практику. Не редактируйте /usr/lib/systemdверсии файлов модулей, если вы не являетесь сопровождающим дистрибутива, или вам не нравится, когда ваши файлы перезаписываются при каждом обновлении пакета. Либо скопируйте файл модуля в /etc/systemdи затем отредактируйте, либо используйте раскрывающийся файл (подробности см. В systemd.unit (5)). Еще проще, просто используйте, systemctl edit smb.serviceкоторый делает волшебный файл автоматически!
Джереми Виссер
3
Спасибо за редактирование ответа! Это решает проблемы, и я обратился в upvote. :-)
Джереми Виссер
10

Сделать две вещи:

  1. Отредактируйте /lib/systemd/system/smb.serviceфайл модуля, чтобы указать зависимость. [unit]Раздел содержит After=строку , которая определяет , какие услуги / цели должны быть достигнуты до этого.

    After=syslog.target network.target nmb.service winbind.service
    

    Измените это на:

    After=dirsrv.target syslog.target network.target nmb.service winbind.service
    
  2. Сообщите об этой зависимости в Fedora как об ошибке , чтобы ее можно было включить в будущие выпуски.

Майкл Хэмптон
источник
Это не похоже на работу. Самба все еще загружается до 389.
Дилан Klomparens
3
после того, как вы измените unitфайлы, вы должны обычно запускатьsystemctl daemon-reload
scottyseus
2

вам может понадобиться изменить или включить строку с Requiresдирективой в [Unit] разделе /usr/lib/systemd/system/smb.serviceфайла.

Requires=dirsrv.target

а также

After=dirsrv.target
cturiel
источник
Ну, я проголосовал за этот ответ, однако, я бы лично пошел с Wants = dirsrv.target вместо Требуется =. (см. systemd.unit (5) для Wants =)
галактика
2

Существует две альтернативы для изменения файла службы в /usr/lib/systemd/system(см. Пример 2. Переопределение настроек поставщика ):

  1. Скопируйте файл /etc/systemd/systemи внесите изменения в копию. Этот файл полностью переопределит файл в /usr/lib.

  2. Создайте файл /etc/systemd/system/smb.service.d/local.conf. Содержимое файла должно быть примерно таким, как в примере ниже. Это выборочно отменяет параметры «Требуется» и «После» в файле предоставляемых поставщиком услуг.

Каждый из них (включая изменение файла в /usr/lib) имеет свои преимущества и недостатки. Лучший выбор может зависеть от сервиса и характера модификаций.

Хотя это может работать, недостаточно только добавить опцию «После» (см. Раздел «[Единицы]» ). «После» контролирует порядок, но не зависимости. Если dirsrv.targetне запускается каким-либо другим способом, указание заказа не запустит его. Использование параметров «Требуется» или «Требуется» приведет dirsrv.targetк запуску.

[Unit]
Requires=dirsrv.target
After=dirsrv.target

NB: я не знаю, был ли этот подход доступен, когда этот вопрос был первоначально задан.

глаз
источник