回答:
systemdにサービスを実行するように伝え
sudo
ますか?
sudo
それとは何の関係もありません。
通常、ユニットファイルのセクションにUser=
and Group=
ディレクティブを使用して、特定のユーザー/グループとしてサービスを実行するようにsystemdに指示し[Service]
ます。
それらをrootに設定します(または、rootとして実行することがデフォルトであるため、削除します)。
User=root
ます。私の答えをご覧ください。
クリアするには、systemd
システムサービスはデフォルトでrootとして実行されますが、デフォルトの動作とでシステムサービスを実行することにはまだ違いがありますUser=root
。
生成されたプロセスの環境変数で説明されているように、これらの変数はが設定されている場合にのみ設定User=
されます。
$USER, $LOGNAME, $HOME, $SHELL
この発見を確認するためにテストしました。したがって、上記の変数のいずれかが必要なsystemdサービスをrootとして実行する場合は、を設定する必要がありますUser=root
。
一時的な解決策ですが、ピンチで動作するようになりました:
/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
次のようなsystemdユニットファイルでsudo特権を持つユーザーで実行できます。
[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
sudo
すると、起動が少し遅くなります。そして、それは不要です。
systemd
、ルート権限でユニットファイルを実行します。