Как создать цель systemd?

Вы можете использовать expand () вызов. Например,

:echo expand("#2:p")

напечатает полный путь к файлу в буфере №2. Вы можете перечислить все буферы с помощью : ls

Вы можете использовать другие модификаторы и другие ключевые слова (для получения полной информации см. : help expand () )

Вот небольшой отрывок:

  Когда {expr} начинается с '%', '#' или '<', раскрытие выполняется 
как для специальные переменные cmdline с соответствующими модификаторами 
. Вот краткий обзор: 
 
% текущее имя файла 
 # альтернативное имя файла 
 #n альтернативное имя файла n 
  имя файла под курсором 
  имя файла autocmd 
  номер буфера autocmd (в виде строки!) 
  сопоставленное имя autocmd 
  имя исходного файла сценария 
  номер строки исходного файла сценария 
  слово под курсором 
  WORD под курсором 
 <клиент> {clientid} последнего полученного сообщения 
server2client () 
Модификаторы: 
: p развернуть до полного пути 
: h head (последний компонент пути удален) {{ 1}}: t tail (только последний компонент пути) 
: r root (удалено одно расширение) 
: только e extension 
 
Пример: {{1} }: let & tags = expand ("%: p: h"). "/ tags" 
Обратите внимание, что при раскрытии строки, начинающейся с '%', '#' или 
 '<', любой следующий текст игнорируется. Это НЕ работает: 
: let doesntwork = expand ("%: h.bak") 
Используйте это: 
 
17
08.08.2016, 04:48
2 ответа

Чтение через man 5 systemd.unit и man 5 systemd.target сообщает нам, что файлы модулей используются для определения целей, а также всего остального systemd. Нет специальной документации о том, как создать цель , поэтому сложно определить, как это должно быть сделано, но это не слишком отличается от создания службы.

При создании цели вам нужно будет создать символические ссылки в каталог target.wants из каталога служб systemd. Затем вы можете установить / загрузить свою цель. Вот как это может выглядеть на вашем примере.

/etc/systemd/system/foo.target

Это файл целевого модуля. Если взять в качестве примера graphical.target, мы можем создать нашу собственную цель, используя ее в качестве основы.

[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes

Объяснение параметров, взятых из справочных страниц systemd;

  • Описание - Описывает цель. Вы должны понимать
  • Требует - жесткие зависимости цели. Прежде чем запускать собственные службы
  • Хочет - Программные зависимости, вы должны запустить базовую систему. Цель не требует их для запуска.
  • Конфликты - Если у юнита есть настройка Конфликтов на другом юните, запуск первого остановит второй и наоборот.
  • После - Загрузка после этих служб
  • AllowIsolate - Это действительно зависит от вас и вашей среды. Подробности доступны на странице руководства systemd.unit (5)

/etc/systemd/system/foo.target.wants/

Это каталог, в котором вы будете связывать службы, которые вы создаете / требуете для своего цель. Это эквивалентно параметру Wants = в файле модуля. Создайте этот каталог, а затем создайте такие символические ссылки; ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service. Это создает символическую ссылку от bar.service в системном каталоге к вашему каталогу foo.target.wants.


Я думаю, что создание файла модуля для службы выходит за рамки этого ответа, и этот вопрос определенно более документирован, поэтому я оставлю это на данный момент. Когда вы создаете свой файл модуля, просто создайте символическую ссылку на каталог target.wants или добавьте его в директиву Wants = .

26
27.01.2020, 19:47

Я настоятельно рекомендую взглянуть на них самостоятельно в качестве примеров, прежде чем приступить к выполнению этой задачи,

vim /lib/systemd/system/*.target

Обратите внимание, что если вы создаете свою собственную цель, вам не нужно ничего связывать вручную.

Вы можете просто добавить службу в /etc/systemd/systemи запустить на ней systemctl enable. Пока это WantedByили RequiredBy, systemd сделает всю работу за вас.

1
17.11.2020, 04:17

Теги

Похожие вопросы