Solution 1 :
dire à systemd d'exécuter le service avec
sudo
?
sudo
n'a rien à voir avec ça.
Généralement, vous demandez à systemd d'exécuter un service en tant qu'utilisateur/groupe spécifique avec un User=
et Group=
directive dans le [Service]
section du fichier unité.
Définissez-les sur root (ou supprimez-les, car l'exécution en tant que root est la valeur par défaut).
Solution 2 :
Pour effacer, systemd
les services système s'exécutent en tant que root par défaut, mais il existe toujours une différence entre le comportement par défaut et l'exécution d'un service système avec User=root
.
Comme documenté dans Variables d'environnement dans les processus générés, ces variables ne sont définies que si User=
est défini :
$USER, $LOGNAME, $HOME, $SHELL
J'ai testé pour confirmer ce constat. Donc, si vous voulez exécuter un service systemd en tant que root qui a besoin de l'une des variables ci-dessus, vous devez définir User=root
.
Solution 3 :
une solution temporaire, mais l'a fait fonctionner en un clin d'œil :
/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Peut s'exécuter avec un utilisateur disposant des privilèges sudo dans un fichier d'unité systemd comme ceci :
[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