我正在运行 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 的依赖。