Вопрос: Можно ли переопределить файл systemd для создания файла блока шаблонов?


Я знаю, что systemd обеспечивает превосходный механизм для переопределения пакета данных, предоставленного пакетом, для влияния на конфигурацию / поведение службы. Обычно это делается с помощью команды ниже

sudo systemctl edit <unitfile>

для создания переопределенного файла conf на

/etc/systemd/system/<unitfile.d>/

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

<servicename>@.service

а затем создавая его как

systemctl start <servicename>@<instancename>

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

Поскольку, по моему пониманию, в файле элемента шаблона есть соглашение об именах, которое отличается от обычного файла блока, я думаю, что не могу переопределить пакетный файл с файлом шаблона, поместив его в / etc / systemd / system.

Есть ли определенный способ достичь того, что я пытаюсь сделать?

Конкретный сценарий: Пакет grafana устанавливает файл блока grafana-server.service. Я хочу запустить два экземпляра grafana на моей машине - по одному для DEV и STG. Я смог это сделать:

  • измените файл grafana-server.service (используя% I, чтобы установить расположение папок и пути к файлам)
  • переименуйте измененный grafana-server.service в grafana-server @ .service
  • начните экземпляры grafana, используя:

    sudo systemctl start grafana-server@dev
    

    а также

    sudo systemctl start grafana-server@stg
    

Однако это нарушает связь с файлом служебной единицы, представленным в графане, и если они улучшат файл службы при обновлении, мне нужно будет снова повторить эту операцию. Моя цель - избежать этой прямой зависимости и вместо этого преобразовать ее в зависимость от переопределения.

Есть предположения?


5
2018-04-12 19:58


Источник




Ответы:


Для обоих вариантов ниже, сначала переопределите grafana-server.service (без @) на /etc/systemd/system и подавлять ExecStart (предположим, что он использует это), чтобы он ничего не начинал. На /etc/systemd/system/grafana-server.service.d/10-disable-execstart.conf:

[Service]
ExecStart=
WorkingDirectory=/path/to/your/confdir

Вариант 1 - переопределение с помощью общих экземпляров

Создать grafana-server@.service который соответствует вашим настройкам со следующей конфигурацией: [Unit] а также [Service]:

[Unit]
PartOf=grafana-server.service
ReloadPropagatedFrom=grafana-server.service

Они должны связывать start / stop / restart grafana-server со всеми вашими экземплярами вместе. магия не очень хорошо документировано, но если вы положите <instance_name>.conf файлы на вашем /path/to/your/confdir, все эти экземпляры будут связаны автоматически!

Вариант 2 - переопределение определенных экземпляров для сохранения конфигурации пакета

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

/lib/systemd/system/grafana-server.service

в

/etc/systemd/system/grafana-service@<instance>.service

а затем переопределить только конкретные параметры этого экземпляра, используя

/etc/systemd/system/grafana-server@<instance>.service.d/99-my-options.conf

Не забудьте добавить следующую конфигурацию в [Unit] а также [Service] в 99-my-options.conf:

[Unit]
PartOf=grafana-server.service
ReloadPropagatedFrom=grafana-server.service

Это будет предполагать для каждого экземпляра все grafana-server.service опций и переопределит их со всеми параметрами 99-my-options.confфайл, а также привязать действия start / stop / restart к grafana-server.service.

В обоих вариантах, если вы запустите

systemctl start grafana-server.service

все ваши экземпляры, которые имеют /path/to/confdir/<instance>.conf файл будет запущен. То же самое относится к stop а также restart И вы всегда можете управлять ими индивидуально, используя их grafana-server@<instance> наименование услуги.


3
2017-10-22 14:20