Я прочитал, что есть две папки для файлов модулей (не в пользовательском режиме).
/usr/lib/systemd/system/: units provided by installed packages
/etc/systemd/system/: units installed by the system administrator
Противоречие с этим пониманием заключается в следующем ответе: https://unix.stackexchange.com/a/47715/33386 . Может ли кто-нибудь заполнить недостающую информацию, чтобы я понял, что происходит? ( ОБНОВЛЕНИЕ: ответ был обновлен, и мое понимание больше не конфликтует с ним. )
Кроме того, кажется, что сценарии организованы в подпапках внутри /etc/systemd/system/
папки:
getty.target.wants
multi-user.target.wants
В другом месте я читал, что есть другие места. Похоже, что они для пользовательских услуг.
/usr/lib/systemd/user/ where services provided by installed packages go.
/etc/systemd/user/ where system-wide user services are placed by the system administrator.
~/.config/systemd/user/ where the user puts its own services.
Обновление 2015-08-31:
Ради других, вот ссылка на связанный с этим вопрос, который я недавно задавал: куда я помещаю сценарии, выполняемые модулями systemd?
systemd
directory-structure
Джонатан Комар
источник
источник
/etc/systemd/system
там, где вы помещаете свои сценарии, pacman помещает сценарии пакета,/usr/lib/systemd/system
а выдачаsystemctl enable foo.service
создает символические/usr
/etc
man systemd.target
: это объясняет причины группирования.Ответы:
Лучшее место для размещения файлов системного блока:
/etc/systemd/system
просто обязательно добавьте цель в раздел [Install], прочитайте «Откуда он знает?» для деталей. ОБНОВЛЕНИЕ :/usr/local/lib/systemd/system
это еще один вариант, подробности читайте в «Серой зоне».Лучшее место для размещения файлов пользовательских модулей:
/etc/systemd/user
или,$HOME/.config/systemd/user
но это зависит от разрешений и ситуации.Правда состоит в том, что юниты systemd (или, как их называет во вступительном предложении «конфигурации юнитов») могут находиться где угодно - при условии, что вы готовы создавать ручные символические ссылки и знаете о предостережениях. Это облегчает жизнь, чтобы поместить устройство туда, где
systemctl daemon-reload
можно найти его по нескольким причинам:systemctl enable
. Это потому, что ваш юнит будет автоматически добавлен в дерево зависимостей юнитов (кеш юнитов).Как это узнать?
А как именно
systemctl enable
узнать, где создать символическую ссылку? Вы жестко закодируете его в самом модуле под[install]
разделом. Обычно есть такая строкаэто соответствует предопределенному месту в файловой системе. Таким образом, вы
systemctl
узнаете, что этот модуль зависит от группы файлов модулей, которая называетсяmulti-user.target
(«target» - это термин, используемый для обозначения групп зависимостей модулей. Вы можете перечислить все группы с помощьюsystemctl list-units --type target
). Группа файлов модулей, загружаемых с целью, помещается вtargetname.target.wants
каталог. Это просто каталог, полный символических ссылок (или реальная вещь). Если ваш[Install]
раздел говорит , что это , но если символическая ссылка на него не существует в каталоге, то он не будет загружаться. Когда генераторы модулей systemd добавляют ваш модуль в кэш дерева зависимостей при загрузке (вы можете вручную запускать генераторы ), он автоматически знает, куда поместить символическую ссылку - в данном случае в каталогWantedBy
multi-user.target
multi-user.target.wants
systemctl daemon-reload
/etc/systemd/system/multi-user.target.wants/
если вы включите его.Ключевые моменты в руководстве:
В systemctl ищите команды файла модуля
Путь загрузки файла модуля
Таблица 1 и Таблица 2 из
man systemd.unit
хороши.Загрузка путей при работе в системном режиме (
--system
)./etc/systemd/system
Локальная конфигурация/run/systemd/system
Единицы времени выполнения/usr/lib/systemd/system
Единицы установленных пакетовЗагрузка пути при работе в пользовательском режиме (
--user
)Существует разница между единицами измерения пользователя и единицами измерения всех / глобальных пользователей.
User-зависимый
$XDG_CONFIG_HOME/systemd/user
Конфигурация пользователя (используется только когда$XDG_CONFIG_HOME
установлено)$HOME/.config/systemd/user
Конфигурация пользователя (используется только когда$XDG_CONFIG_HOME
не задано)$XDG_RUNTIME_DIR/systemd/user
Единицы времени выполнения (используется только когда$XDG_RUNTIME_DIR
установлено)$XDG_DATA_HOME/systemd/user
Единицы пакетов, которые были установлены в домашнем каталоге (используется, только если$XDG_DATA_HOME
установлено)$HOME/.local/share/systemd/user
Единицы пакетов, которые были установлены в домашнем каталоге (используется только когда$XDG_DATA_HOME
не установлен)--global
(все пользователи)Единицы, которые применяются ко всем пользователям, то есть принадлежат каждому пользователю. Таким образом, каждый пользователь может остановить эти службы, даже если администратор включает их при загрузке.
/etc/systemd/user
Локальная конфигурация для всех пользователей (systemctl --global enable userunit.service
)/usr/lib/systemd/user
Единицы пакетов, которые были установлены в масштабе всей системы для всех пользователей/run/systemd/user
Единицы времени выполненияСерая область
С одной стороны, Стандарт Файловой Иерархии указывает, что
/etc
это для локальных конфигураций, которые не выполняют двоичные файлы. С другой стороны, он указывает, что/usr/local/
«предназначен для использования системным администратором при локальной установке программного обеспечения». Вы также можете утверждать (если не только в целях организации), что все файлы системных модулей должны быть повреждены/usr/local/lib/systemd/system
, но это предназначено для файлов модулей, которые являются частью «программного обеспечения», а не из диспетчера пакетов. Соответствующие системные системные юзеры, которые являются общесистемными, могут оказаться недоступными/usr/local/lib/systemd/user
.источник
/etc/systemd/system
, это общий совет для самостоятельно созданных файлов модулей? Все, что установлено менеджером пакетов, всегда должно включать их,/usr/lib/systemd/system
например./etc/systemd/user
для (гарантированных) общесистемных пользовательских услуг и~/.config/systemd/user
для пользовательских пользовательских услуг./etc/systemd/system
там, где вы помещаете свои скрипты, pacman помещает скрипты пакета/usr/lib/systemd/system
.Выдача
systemctl enable foo.service
создает символические ссылки из/usr
в/etc
. См. Раздел «Путь загрузки модуля»man systemd.unit(5)
для более подробной информации.источник
Я написал 3, один для
ntpd
, один для второго, статическая карта Ethernet и один для запускаp0f
, идентификатор пассивной ОС. Я положил их всех/etc/systemd/system
. Похоже, я мог бы позволить себеsystemd
обрабатывать NTP, но я не думаю, что хочу так сильно на это полагаться.источник