Запустите сервис с Sudo

Я пытаюсь выполнить Экспресс, который сервер API с sudo полномочиями и иметь его автоматически запускает на начальной загрузке.

API нужен доступ к bcm2835 библиотеке, и я получаю следующее при попытке выполнить узел server.js

bcm2835_init: Не удалось открыть/dev/mem: Разрешение отклонило/home/pi/Documents/node_modules/rpio/lib/rpio.js:104
возвратите bindfunc (optarg);

Ошибка: не Мог инициализировать bcm2835 библиотеку
в bindcall (/home/pi/...) и т.д.

Однако это загружает прекрасное выполнение sudo узел server.js.

Я создал сервисный файл в/etc/systemd/system следующим образом:

[Unit]
Description=Node API
After=network.target

[Service]
ExecStart=/usr/bin/node /home/pi/Documents/server.js
Restart=always
SyslogIdentifier=controller
User=root
Group=root
Environment=

TimeoutStopSec=30

[Install]
WantedBy=multi-user.target

Я нашел некоторое руководство здесь и здесь, но они кажутся немного прочь, так как для подкоманды нужны sudo/root полномочия.

При выполнении service controller start из командной строки это запрашивает имя пользователя и пароль.

Как я могу выполнить этот сервис с верными полномочиями, таким образом, он загружается с Пи?

1
задан 1 November 2018 в 20:04

1 ответ

необходимо позволить следующие команды в sudoers файле:

systemctl start <your-systemd-service>

systemctl stop <your-systemd-service>

systemctl restart <your-systemd-service>

systemctl enable <your-systemd-service>

не используйте сервисную команду.

Не забудьте заменять сервисное название своим systemd сервисом. Например, если Ваш сервисный файл с именем:

/etc/systemd/system/controller.service

затем это должно быть:

systemctl start controller.service

systemctl stop controller.service

systemctl restart controller.service

systemctl enable controller.service

также, необходимо будет сделать:

systemctl daemon-reload

после размещения Вас сервисный файл в systemd

Добавление commonads в sudoers:

https://www.atrixnet.com/allow-an-unprivileged-user-to-run-a-certain-command-with-sudo/

команда в качестве примера:

<your-user> ALL=(ALL) NOPASSWD: /usr/bin/systemctl start controller.service
1
ответ дан 7 December 2019 в 15:11

Другие вопросы по тегам:

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