Lösung 1:
Sagen Sie systemd, dass es den Dienst mit sudo
ausführen soll ?
sudo
hat nichts damit zu tun.
Normalerweise weisen Sie systemd an, einen Dienst als einen bestimmten Benutzer/eine bestimmte Gruppe mit einem User=
auszuführen und Group=
Direktive in [Service]
Abschnitt der Unit-Datei.
Setzen Sie diese auf root (oder entfernen Sie sie, da sie standardmäßig als root ausgeführt werden).
Lösung 2:
Zum Löschen systemd
Systemdienste werden standardmäßig als root ausgeführt, aber es gibt immer noch einen Unterschied zwischen dem Standardverhalten und dem Ausführen eines Systemdienstes mit User=root
.
Wie in Umgebungsvariablen in erzeugten Prozessen dokumentiert, werden diese Variablen nur gesetzt, wenn User=
gesetzt ist:
$USER, $LOGNAME, $HOME, $SHELL
Ich habe getestet, um diesen Befund zu bestätigen. Wenn Sie also einen systemd-Dienst als root ausführen möchten, der eine der oben genannten Variablen benötigt, müssen Sie User=root
festlegen .
Lösung 3:
eine vorübergehende Lösung, aber zur Not zum Laufen gebracht:
/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Kann mit einem Benutzer ausgeführt werden, der sudo-Berechtigungen in einer systemd-Einheitendatei wie folgt hat:
[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