По какой-то причине systemd не заменяет %i
или %I
с именем экземпляра в ExecStart
/systemd/system/service/foo@.service
[Unit]
Description=Foo service for %I
[Service]
User=keith
ExecStart=/path/to/foo/%i/food
...
/ путь / к / foo / bar / food
#/bin/bash
node /path/to/foo/bar/bard.js
Потом бегу:
$ sudo systemctl daemon-reload
$ sudo systemctl start foo@bar
$ sudo systemctl status foo@bar
● foo@bar.service - Foo service for bar
Loaded: loaded (/etc/systemd/system/foo@.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2016-09-30 19:07:02 EDT; 6s ago
Process: 18705 ExecStart=/path/to/foo/%i/food (code=exited, status=203/EXEC)
Main PID: 18705 (code=exited, status=203/EXEC)
Sep 30 19:07:02 kptow systemd[1]: Started Foo service for bar.
Sep 30 19:07:02 kptow systemd[1]: foo@bar.service: Main process exited, code=exited, status=203/EXEC
Sep 30 19:07:02 kptow systemd[1]: foo@bar.service: Unit entered failed state.
Sep 30 19:07:02 kptow systemd[1]: foo@bar.service: Failed with result 'exit-code'.
В %I
в описании заменяется, но %i
в ExecStart - нет. Я пробовал использовать %i
/%I
, но ни то, ни другое не работает.
Первый аргумент ExecStart=
должен быть абсолютным путем к исполняемому файлу. Замены не принимаются.
Если вы просто загружаете сценарий bash, который затем запускает Node.js, вы можете сделать это явно:
ExecStart=/bin/bash /path/to/foo/%i/food