无法在 shell 文件中运行 dotnet 但可以在终端中运行?

无法在 shell 文件中运行 dotnet 但可以在终端中运行?

我正在运行 Ubuntu 20.04,并且对 Linux 系统还很陌生。

我正在尝试运行我编写的 shell 脚本,该脚本非常简单:

#!/bin/sh
dotnet /some/file.dll

该脚本位于<root>/var/www/。它将通过调用 来运行systemctl start my-program.service

但是当我运行它时,我收到错误消息3: dotnet: not found。这没有多大意义,因为我可以dotnet在终端中毫无问题地运行该命令,而且当我尝试<root>/snap/bin/dotnet在终端中运行它时,它也能正常工作。

dotnet sdk 的安装位于,<root>/snap/bin/dotnet所以我认为我只需要将其添加到我的目录中,PATH我这样做了。它看起来像这样:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

它是使用export命令添加的。

我甚至随后重启了服务器,但仍然无济于事。 Shell 文件一直给我这个错误。

我该如何修复这个问题?

答案1

从外观上看,您正在尝试将该脚本作为 systemd 服务运行。

Systemd 服务不能对它们在什么环境中运行做出太多假设。更具体地说,它们无法访问您在用户会话中定义的 PATH,因为它们不在用户会话上下文中运行。它们将在系统上下文中运行。
最简单的方法是在 shell 脚本中指定 dotnet 可执行文件的完整路径。这样就消除了对 PATH 的依赖。

相关内容