我有一個使用Visual Studio製作和測試的項目。有用。 然後我將它上傳到Ubuntu服務器。 然後用dotnet run
運行它。 Works,遠程機器看到它(通過nginx代理)。Kestrel服務器在後臺運行時不起作用,爲什麼?
然後我試了dotnet run &
。該過程看起來像開始,但沒有監聽指定的端口。然後,根據the example,我試過sudo nohup dotnet run kestrel > /dev/null 2>&1 &
。這一次它聽了一會兒,然後去世:
應用程序啓動。按下Ctrl + C關閉。
失敗: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware [0] 發生未處理的異常:找不到編譯庫 位置:爲包「google.protobuf」 System.InvalidOperationException找不到編譯庫的位置包「google.protobuf」在 Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths()
(從輸出nohup.out的的片段,第一牀單,我跳過項目的詳細信息爲不相關和私有的)。
任何線索發生了什麼?在前臺運行時,我仍然沒有錯誤。
下面是我發現的:當我作爲root運行它時,我無法運行它(它給出相同的錯誤消息)。在我的測試服務器上,我有一個名爲「dotnet」的特殊用戶帳戶。當我以dotnet
的身份登錄時,我可以運行該應用程序。作爲根我不能。
我不想用root權限運行我的應用程序。
下一個嘗試:我以root身份運行dotnet restore
。然後我去nohup dotnet run kestrel > /dev/null 2>&1 &
,它的工作原理。
不錯。現在有沒有辦法以有限的權限啓動我的應用程序?
在哪個端口上運行它?端口<1024左右,需要root權限 – Tseng
高端,54321。我可能通過在不同的服務器上嘗試相同的操作,發現偶然發生的事情。問題不在於端口訪問權限,而在於對.NET臨時文件具有文件權限。 – Harry