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

шаблон модуля systemd для экземпляров, запущенных из отдельных каталогов

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

Я попытался сделать путь к экземпляру именем экземпляра, как показано ниже. У меня есть следующий файл модуля /etc/systemd/system/myserver@.service:

[Unit]
Description=server instance '%I'
Requires=...
Wants=...

[Service]
Type=simple
ExecStart=%I/bin/server.sh
PIDFile=%I/server.pid

[Install]
WantedBy=multi-user.target

Я делаю перезагрузку демона:

$ sudo systemctl daemon-reload

И я пытаюсь запустить экземпляр с:

$ sudo systemctl start myserver@/path/to/instance1.service

Я получаю сообщение об ошибке из-за этого высказывания, посмотрите статус, чтобы узнать подробности. Итак, я делаю:

$ sudo systemctl status myserver@/path/to/instance1.service

Я вижу ошибку, что путь ExecStart не является абсолютным:

May 17 16:04:46 myhost systemd[1]: [/etc/systemd/system/myserver@.service:9] \
  Executable path is not absolute, ignoring: %I/bin/server.sh
May 17 16:04:46 myhost systemd[1]: tistfe@-path-to-instance1.service lacks \
  both ExecStart= and ExecStop= setting. Refusing.

Есть ли способ параметризовать путь к двоичному файлу ExecStart (и PIDFile)? Я застрял в создании отдельного файла модуля для каждого экземпляра?