Я пытаюсь выполнить Экспресс, который сервер 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
из командной строки это запрашивает имя пользователя и пароль.
Как я могу выполнить этот сервис с верными полномочиями, таким образом, он загружается с Пи?
необходимо позволить следующие команды в 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