Řešení 1:
řekněte systemd, aby spustil službu s
sudo?
sudo nemá s tím nic společného.
Obvykle dáváte systemd pokyn, aby spustil službu jako konkrétní uživatel/skupina s User= a Group= direktivě [Service] oddíl souboru jednotky.
Nastavte je jako root (nebo je odstraňte, protože výchozí je spuštění jako root).
Řešení 2:
Chcete-li vymazat, systemd systémové služby běží ve výchozím nastavení jako root, ale stále existuje rozdíl mezi výchozím chováním a spuštěním systémové služby s User=root .
Jak je zdokumentováno v Proměnných prostředí v vytvořených procesech, tyto proměnné se nastavují pouze v případě, že User= je nastaveno:
$USER, $LOGNAME, $HOME, $SHELL
Testoval jsem, abych toto zjištění potvrdil. Pokud tedy chcete spustit službu systemd jako root, která potřebuje jednu z výše uvedených proměnných, musíte nastavit User=root .
Řešení 3:
dočasné řešení, ale zprovoznil se v malíčku:
/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Lze spustit s uživatelem, který má oprávnění sudo v souboru jednotky systemd, jako je tento:
[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