Soluzione 1:
di' a systemd di eseguire il servizio con
sudo
?
sudo
non c'entra nulla.
In genere si ordina a systemd di eseguire un servizio come utente/gruppo specifico con un User=
e Group=
direttiva nel [Service]
sezione del file dell'unità.
Impostali su root (o rimuovili, poiché l'esecuzione come root è l'impostazione predefinita).
Soluzione 2:
Per cancellare, systemd
i servizi di sistema vengono eseguiti come root per impostazione predefinita, ma c'è ancora una differenza tra il comportamento predefinito e l'esecuzione di un servizio di sistema con User=root
.
Come documentato in Variabili d'ambiente nei processi generati, queste variabili sono impostate solo se User=
è impostato:
$USER, $LOGNAME, $HOME, $SHELL
Ho testato per confermare questo risultato. Quindi, se vuoi eseguire un servizio systemd come root che necessita di una delle variabili di cui sopra, devi impostare User=root
.
Soluzione 3:
una soluzione temporanea, ma ha funzionato in un attimo:
/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Può essere eseguito con un utente che dispone dei privilegi sudo in un file unit systemd in questo modo:
[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