gpt4 book ai didi

asp.net-core - Kestrel 服务器在后台运行时不工作,为什么?

转载 作者:行者123 更新时间:2023-12-03 18:27:44 26 4
gpt4 key购买 nike

我有一个项目是用 Visual Studio 制作和测试的。有用。然后我将它上传到 Ubuntu 服务器。然后使用 dotnet run 运行它。有效,远程机器可以看到它(通过 nginx 代理)。

然后我尝试了 dotnet run &。该过程似乎已启动,但没有任何内容在指定的端口上监听。然后,根据the example ,我尝试了 sudo nohup dotnet run kestrel >/dev/null 2>&1 &。这次它听了一会儿,然后死了:

Application started. Press Ctrl+C to shut down.

fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[0] An unhandled exception has occurred: Can not find compilation library location for package 'google.protobuf' System.InvalidOperationException: Can not find compilation library location for package 'google.protobuf' at Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths()

(来自 nohup.out 的输出片段,首先是床单,我跳过了项目细节,因为它不相关且是私有(private)的)。

有什么线索吗?在前台运行时,我仍然没有收到任何错误。

这是我发现的:当我以 root 身份运行它时,我无法运行它(它给出相同的错误消息)。在我的测试服务器上,我有一个名为“dotnet”的特殊用户帐户。当我以 dotnet 身份登录时,我可以运行该应用程序。作为 root,我不能。

我不想以 root 权限运行我的应用。

下一步尝试:我以 root 身份运行 dotnet restore。然后我使用 nohup dotnet run kestrel >/dev/null 2>&1 & 就可以了。

不错。现在有没有办法以有限的权限启动我的应用程序?

最佳答案

我自己找到了答案,所以我会分享。

首先:如果您不打算授予 .NET Core 项目完全的 root 权限,请不要在 Linux 上以 root 身份运行它们。我认为具有 root 权限的 Web 应用程序是个坏主意,有点自找麻烦。

但是好吧,当某些东西不起作用时,不时地使用 sudo 是很诱人的。事实证明这是问题的原因:

dotnet restoredotnet run 必须由同一用户以相同权限执行。当我以 root 身份发出 dotnet restore 时,它起作用了。如果您想以较低权限的用户身份运行项目,则更难。您必须在发出 dontet restore 之前删除所有临时文件。所以,通常 nohup dotnet run kestrel >/dev/null 2>&1 & 可以作为魅力,这里不需要 sudo,运行它作为根可能有害。

现在我总是创建特殊的 dotnet 用户来在服务器上运行 dotnet 应用程序。这样比较安全。用户不能 sudo。当我需要执行管理任务时,我只是启动单独的根 session 。我对数据库访问使用相同的方法。应用程序只有程序执行权限,连选择权限都没有。

关于asp.net-core - Kestrel 服务器在后台运行时不工作,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41548903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com