.net core3.1 webapi項目部署在centos7中,通過supervisor來做進程守護遇到backoff Exited too quickly (process log may have details)的錯誤--並提供解決方法


搞開發是不是很奇怪,昨天.net core3.1 webapi項目在linux中還跑的好好的,咋就過了一個周末為什么就報錯了呢?這個錯還很奇怪請看咱們的supervisor提供的日志信息

因為supervisor安裝之后,supervisor 的服務端daemon在路徑  /etc/ 項目對應的supervisor的配置需要在 /etc/supervisord.d/ 路徑下去創建具體如何將.net core3.1 webapi 通過supervisor來守護進程請看點擊

[.net core項目在 linux服務器部署的解決方法]    這里就不羅嗦,這是我將.net core3.1 webapi項目部署在supervisor進程守護工具中的配置,進入testfreesql.ini文件,

vim /etc/supervisord.d/testfreesql.ini

看到的信息如下:

[program:testfreesql] command=dotnet EmsTestFreeSqlMySql.dll --urls="http://*:5000" directory=/var/testfreesql/ environment=ASPNETCORE_ENVIRONMENT=Development user=root stopsignal=INT autostart=true autorestart=true startsecs=1 stderr_logfile=/var/log/EmsTestFreeSqlMySql.err.log stdout_logfile=/var/log/EmsTestFreeSqlMySql.out.log

阿西吧報這個錯,蒙蔽狀態 錯誤信息:backoff Exited too quickly (process log may have details) ,可以斷定此處定妖孽作祟,好的,那咱就看看supervisor提供的日志信息把


 

在linux 查看日志命令

vim /var/log/EmsTestFreeSqlMySql.err.log

發現了妖孽

Unhandled exception. System.InvalidOperationException: Could not determine an appropriate location for storing user secrets. Set the DOTNET_USER_SECRETS_FALLBACK_DIR environment variable to a folder where user secrets should be stored.
at Microsoft.Extensions.Configuration.UserSecrets.PathHelper.GetSecretsPathFromSecretsId(String userSecretsId)
at Microsoft.Extensions.Configuration.UserSecretsConfigurationExtensions.AddUserSecrets(IConfigurationBuilder configuration, String userSecretsId, Boolean reloadOnChange)
at Microsoft.Extensions.Configuration.UserSecretsConfigurationExtensions.AddUserSecrets(IConfigurationBuilder configuration, Assembly assembly, Boolean optional, Boolean reloadOnChange)
at Microsoft.Extensions.Configuration.UserSecretsConfigurationExtensions.AddUserSecrets(IConfigurationBuilder configuration, Assembly assembly, Boolean optional)
at Microsoft.Extensions.Hosting.Host.<>c__DisplayClass1_0.<CreateDefaultBuilder>b__1(HostBuilderContext hostingContext, IConfigurationBuilder config)
at Microsoft.Extensions.Hosting.HostBuilder.BuildAppConfiguration()
at Microsoft.Extensions.Hosting.HostBuilder.Build()
at EmsTestFreeSqlMySql.Program.Main(String[] args) in E:\KCSoftwareTest\testFreesqlPro\EmsTestFreeSqlMySql\Program.cs:line 18

 

這些bug要加粗,是的看的更清楚些,這里的錯誤是說 “無法確定存儲用戶機密的適當位置”,報這個錯主要原因找到:

第一,發布之后環境變量是Production,配置supervisor的時候寫的是development

我們部署的時候linux先跳到自己的項目目錄,然后  dotnet xxx.dll 跑一遍看看是什么環境

 

 然后根據 hosting environment:Production  在supervisor配置項目中環境變量也要一致 

改完之后再一次進入testfreesql.ini文件,

vim /etc/supervisord.d/testfreesql.ini

看到的信息如下:

[program:testfreesql] command=dotnet EmsTestFreeSqlMySql.dll --urls="http://*:5000" directory=/var/testfreesql/
#切記,這里的環境變量一定要跟發布項目的環境變量要一致 environment=ASPNETCORE_ENVIRONMENT=Development user=root stopsignal=INT autostart=true autorestart=true startsecs=1 stderr_logfile=/var/log/EmsTestFreeSqlMySql.err.log stdout_logfile=/var/log/EmsTestFreeSqlMySql.out.log

webapi項目配置到supervisor時,supervisor需要重新reread下,命令步驟如下:

supervisorctl reread
supervisorctl reload
supervisorctl update

登錄supervisor后台就可以看到綠色的運行結果。

項目啟動的時候一定要把配置注入到容器中,然后把環境變量加上去,

請看Program.cs的一個方法。

public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostbuilderContext, config) => {//報這個錯之后定位加的配置注入,如果你要用到環境變量或者appsettings的配置一定要做這個注入 var env = hostbuilderContext.HostingEnvironment; var basedirectory = AppDomain.CurrentDomain.BaseDirectory; config.SetBasePath(basedirectory) .AddJsonFile("appsettings.json", true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true, reloadOnChange: true) .AddEnvironmentVariables() //切記要添加環境變量 .AddCommandLine(args);//切記要添加這行 ; }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseKestrel(); webBuilder.UseUrls("http://*:5000"); webBuilder.UseStartup<Startup>(); }).ConfigureServices((services) => { services.AddHostedService<MainHostService>();//啟動后台執行程序
                }).ConfigureLogging((logger) => { logger.ClearProviders(); logger.SetMinimumLevel(LogLevel.Trace); }).UseNLog();//加載Nlog

改完代碼之后通過mobaxterm工具上傳到centos7,通過supervisor后台可視化來管理.net core3.1 webapi 的進程。

啊,這個問題我整了一天,終於是搞定了,看下結果

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM