日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

如何让 dotnetcore 在 Linux 上后台运行?

發布時間:2023/12/4 linux 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何让 dotnetcore 在 Linux 上后台运行? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咨詢區

  • jjmcc

我遇到了幾個奇怪的問題不知道如何去解決,場景是這樣的,我的開發環境是 windows,每次發布代碼時我會使用 vs 的 publish 發布代碼,然后將代碼copy到 AWS EC2 上,然后用 dotnet 命令將程序跑起來。

sudo?dotnet?application.dll

程序是可以跑起來,但我發現shell退出后程序也跟著退出了,我知道這是一種前臺部署方式,但我希望程序在生產上以后臺方式運行。

我找了一些資料發現可以用 nohup 實現,然后我改成如下代碼:sudo nohup dotnet application.dll & ,命令執行后我發現了一些錯誤。

Unhandled?Exception:?System.UnauthorizedAccessException:?Access?to?the?path?is?denied.?--->?System.IO.IOException:?Bad?file?descriptor---?End?of?inner?exception?stack?trace?---at?Interop.ThrowExceptionForIoErrno(ErrorInfo?errorInfo,?String?path,?Boolean?isDirectory,?Func`2?errorRewriter)at?Interop.CheckIo(Int64?result,?String?path,?Boolean?isDirectory,?Func`2?errorRewriter)at?System.ConsolePal.Read(SafeFileHandle?fd,?Byte[]?buffer,?Int32?offset,?Int32?count)at?System.ConsolePal.UnixConsoleStream.Read(Byte[]?buffer,?Int32?offset,?Int32?count)at?System.IO.StreamReader.ReadBuffer()at?System.IO.StreamReader.ReadLine()at?System.IO.SyncTextReader.ReadLine()at?System.Console.ReadLine()at?Application.Program.Main(String[]?args)?in?F:\Applications\Server\Program.cs:line?38

從錯誤信息看,上面的 F:\Applications\Server\Program.cs 路徑是我windows開發機的文件路徑,我很奇怪的是為什么會在 nohup 上拋出這種異常,以前臺的方式卻不會拋出?

總的來說,想咨詢下如何通過遠程shell將application以后端的方式部署。

回答區

  • Tovich

這個異常的本質在于你用了 System.Console.ReadLine(),可以改造成如下方式:

var?cancellationTokenSource?=?new?CancellationTokenSource();AppDomain.CurrentDomain.ProcessExit?+=?(s,?e)?=>?cancellationTokenSource.Cancel();Console.CancelKeyPress?+=?(s,?e)?=>?cancellationTokenSource.Cancel();await?Task.Delay(-1,?cancellationTokenSource.Token).ContinueWith(t?=>{});

如果你想退出程序,可以用如下兩種方式:

  • Ctrl + C

  • 向程序發送 SIGTERM 信號

  • 點評區

    以我個人經歷,在 Linux 上部署 .net 程序,由于公司業務量不是特別大所以采用的是 docker swarm + Jenkins 去跑,正因為docker部署,也就無所謂什么后臺方式部署了????,當然原生部署我還是推薦下面兩種進程管理工具:

  • supervisord

  • 這個是微軟官方推薦,官方文檔:http://supervisord.org/

  • pm2

  • nodejs專屬,當然也可以用在其他語言程序上,官方文檔:https://pm2.io/

    我個人還是偏向于 pm2 ,簡單方便快捷。

    總結

    以上是生活随笔為你收集整理的如何让 dotnetcore 在 Linux 上后台运行?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。