Solución 1:
decirle a systemd que ejecute el servicio con sudo
?
sudo
no tiene nada que ver.
Por lo general, le indica a systemd que ejecute un servicio como un usuario/grupo específico con un User=
y Group=
directiva en el [Service]
sección del archivo de la unidad.
Configúrelos como root (o elimínelos, ya que la ejecución como root es la opción predeterminada).
Solución 2:
Para borrar, systemd
los servicios del sistema se ejecutan como root de forma predeterminada, pero aún existe una diferencia entre el comportamiento predeterminado y la ejecución de un servicio del sistema con User=root
.
Como se documenta en Variables de entorno en procesos generados, estas variables solo se establecen si User=
está configurado:
$USER, $LOGNAME, $HOME, $SHELL
Probé para confirmar este hallazgo. Entonces, si desea ejecutar un servicio systemd como raíz que necesita una de las variables anteriores, debe configurar User=root
.
Solución 3:
una solución temporal, pero funcionó en un abrir y cerrar de ojos:
/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Puede ejecutarse con un usuario que tenga privilegios sudo en un archivo de unidad systemd así:
[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