使用 sudo 权限运行 systemd 服务

Dav*_*dJS 1 apache2 dotnet

我有一个 Raspberry PI (Ubuntu 20.04),它正在运行一个 Web UI,其中有一个按钮可以打开继电器(从 Web UI 与 Raspberry PI 通信),因此为了做到这一点,我需要使用 sudo 权限运行它。这是我的服务文件

[Unit]
Description= My Web UI

[Service]
WorkingDirectory=/var/www
ExecStart=/home/ubuntu/.dotnet/dotnet /var/www/My.Web.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-My.Web
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

如果我将/usr/bin/sudo放在ExecStart 的开头,就需要全部了吗?

我需要User=www-data吗?我尝试将 sudo 放入 USER 但收到错误:“Auth 无法识别密码”

mat*_*igo 5

服务可以通过服务文件启用和禁用,sudo并且不需要包含在服务文件中。您配置文件的方式在语法上似乎是正确的,因此,考虑到这一点,应该可以像这样激活它:

sudo systemctl enable {name_of}.service
Run Code Online (Sandbox Code Playgroud)

注意:一定要替换{name_of}为实际的.service文件名。

如果服务要作为 运行www-data,那么User=www-data是必需的。

只要一切顺利,您应该能够启动该服务:

sudo service {name_of} start
Run Code Online (Sandbox Code Playgroud)

注意:再次强调,请务必替换{name_of}为服务名称。注意这里没有.service

只要一切正常,您就可以将其视为常规服务,通过以下方式检查其状态:

sudo service {name_of} status
Run Code Online (Sandbox Code Playgroud)

停止它:

sudo service {name_of} stop
Run Code Online (Sandbox Code Playgroud)

并重新启动它:

sudo service {name_of} restart 
Run Code Online (Sandbox Code Playgroud)

注意:更新 .Net 包后通常需要执行此操作,以确保清除旧缓存并正确加载新文件。

  • @iBug 如果您不喜欢“service”,那么也许您可以编写一个使用“systemctl”语法的自己的答案?就这个答案而言,两者之间确实没有太大区别 (2认同)