Как установить ExecStart из вывода функции в файле конфигурации systemd?

#linux #bash #ubuntu #systemd

#linux #bash #ubuntu #systemd

Вопрос:

Я создал systemd файл службы в каталоге /lib/systemd/system/ для запуска nodejs в качестве службы. Проблема в том, что файл содержит жестко заданный путь к nodej ExecStart полю in. Это означает, что при каждом обновлении nodejs мне придется вручную изменять этот служебный файл. Есть ли способ использовать which node команду в файле ниже, чтобы автоматически задать путь?

 [Unit]
Description=node-server-1
After=network.target

[Service]
Environment=NODE_PORT=3001
Type=simple
User=manid
ExecStart=/home/manidos/.nvm/versions/node/v14.15.1/bin/node /home/manidos/node-nginx/index.js
Restart=on-failure

[Install]
WantedBy=multi-user.target
 

Комментарии:

1. Напишите свой собственный скрипт, с помощью которого узел и команды запуска узла в нем, а затем ссылаются на него в файле systemd service.

2. вы должны создать ссылку на текущую версию и сослаться на нее: ln -s /home/manidos/.nvm/versions/node/v14.15.1 /home/manidos/.nvm/versions/node/current

Ответ №1:

Вы можете запустить простой скрипт bash в ExecStart строке:

ExecStart=/bin/bash -c '$$(/usr/bin/which node) /home/manidos/node-nginx/index.js'

По сути, это запуск which команды в подоболочке и передача ее стандартного вывода для запуска внешним скриптом. Для использования этого конкретного синтаксиса в файле модуля systemd требуются двойные доллары, как описано на странице руководства systemd.service .