У меня есть служба в виде приложения node.js, настроенного с помощью Systemd на Raspbian Jessie, и оно использует свою собственную учетную запись пользователя. Однако я обнаружил, что служба не работает правильно, потому что у нее нет необходимых разрешений. Для одного из установленных мной узловых модулей требуется root-доступ. Если я запускаю приложение вручную с помощью sudo, все работает нормально.
Есть ли способ сказать systemd запустить службу с помощью sudo?
скажите systemd запустить службу с
sudo
?
sudo
не имеет к этому никакого отношения.
Обычно вы указываете systemd запускать службу от имени конкретного пользователя / группы с User=
и Group=
директива в [Service]
раздел файла модуля.
Установите для них root (или удалите их, поскольку по умолчанию используется root).
Очистить, systemd
системные службы по умолчанию запускаются от имени пользователя root, но по-прежнему существует разница между поведением по умолчанию и запуском системной службы с User=root
.
Как указано в Переменные среды в порожденных процессах, эти переменные устанавливаются, только если User=
установлено:
$USER, $LOGNAME, $HOME, $SHELL
Я проверил, чтобы подтвердить этот вывод. Поэтому, если вы хотите запустить службу systemd от имени пользователя root, которой требуется одна из указанных выше переменных, вам необходимо установить User=root
.
временное решение, но заставило его работать в крайнем случае:
/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Может работать с пользователем, имеющим права sudo, в файле модуля systemd, например:
[Unit]
Description=Rails Webserver
After=syslog.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/webserver
ExecStart=/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Restart=always
KillSignal=SIGQUIT
[Install]
WantedBy=multi-user.target
Запустите его как системный пользователь, в этом случае по умолчанию служба работает как root.