私はVisual Studioでプロジェクトを作りテストしました。できます。 それをUbuntuサーバーにアップロードしました。 その後、dotnet run
で実行してください。動作、リモートマシンはそれを参照してください(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ためにコンパイルライブラリの場所を見つけることができません Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePathsでパッケージ「google.protobuf」()
(nohup.outからの出力の断片、最初のリネン、私は無関係とプライベートとしてプロジェクトの詳細をスキップ)。
何が起こっているのか?フォアグラウンドで実行してもエラーは発生しません。
これは私が見つけたものです:私はそれを実行することはできません(同じエラーメッセージが表示されます)。私のテストサーバーには、 "dotnet"という特別なユーザーアカウントがあります。 dotnet
としてログインすると、アプリを実行できます。根として私はできません。
root権限でアプリケーションを実行したくないです。
次の試行:私はdotnet restore
をrootとして実行します。それから私はnohup dotnet run kestrel > /dev/null 2>&1 &
と一緒に行くと動作します。
ニース。制限付きの権限で私のアプリを起動する方法はありますか?
どのポートに接続していますか? 1024未満のポートにはroot特権が必要です – Tseng
高い1つ、54321。異なるサーバーで同じ操作を試みることで、偶然起こったことがわかりました。この問題は、ポートへのアクセス特権ではなく、.NETの一時ファイルへのファイル特権で発生しました。 – Harry