linux 为什么我的应用程序在由systemd.service启动时的行为与手动启动时不同?

hivapdat  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(134)

我有一个dotnet API运行在我的raspberry上,当我手动启动可执行文件时,它监听我的appsettings.json上配置的http://<raspberry_ip>:<custom-port>,但当我在raspberry Boot 上使用它作为服务时,它在http://localhost:5000上启动。
我知道我的/lib/systemd/system/<app>.service中一定缺少了什么,但我没有看到什么。
我的服务配置:

[Unit]
Description=Lauches API on boot
After=multi-user.target

[Service]
ExecStart=/home/<user>/Dev/<app_executable>
User=<user>

[Install]
WantedBy=multi-user.target

这似乎很奇怪,这是因为服务启动的那一刻(太快了?)还是我的配置中缺少了其他东西?
非常感谢.
Ps:我也试着改变ExecStart,并提供我的dotnet路径如下:ExecStart = /<dotnet_path> /<app_path>.dll,但也没有用。

sbtkgmzw

sbtkgmzw1#

您需要设置WorkingDirectory参数。
根据docs
工作目录=
采用相对于RootDirectory=或特殊值“~"指定的服务根目录的目录路径。设置已执行进程的工作目录。如果设置为“~",则使用User=中指定的用户的主目录。如果未设置,则systemd作为系统示例运行时默认为根目录,如果作为用户运行,则默认为相应用户的主目录。如果设置以“-”字符为前缀,则缺少工作目录不会被视为致命。如果未设置RootDirectory=/RootImage=,则WorkingDirectory=相对于运行服务管理器的系统的根。请注意,设置此参数可能会导致将额外的依赖项添加到单元中(见上文)。

相关问题