如何让 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 =>{});

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

  1. Ctrl + C

  2. 向程序发送 SIGTERM 信号

点评区

以我个人经历,在 Linux 上部署 .net 程序,由于公司业务量不是特别大所以采用的是 docker swarm + Jenkins 去跑,正因为docker部署,也就无所谓什么后台方式部署了????,当然原生部署我还是推荐下面两种进程管理工具:

  1. supervisord

这个是微软官方推荐,官方文档:http://supervisord.org/

  1. pm2

nodejs专属,当然也可以用在其他语言程序上,官方文档:https://pm2.io/

我个人还是偏向于 pm2 ,简单方便快捷。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TI BSL in python

今天花了一下午在这个上面,被这个工具整没脾气了快。花点功夫记录一下。 代码是在linux下下过来的: bzr branch lp:python-msp430-tools 看了下,有我想要的器件。然后想着拿到win下工作,就打包拷贝过来。安装: > py…

不懂物理,何以谈科技?

全世界只有3.14 % 的人关注了青少年数学之旅孩子对这个世界有着最纯粹的好奇,经常会问许许多多他们在日常生活中遇到的种种问题。天空为什么是蓝色的?电是怎么来的?为什么不管怎么使劲儿蹦,还是会落到地上?像小木的表妹…

硬盘结构及硬盘错误的解决方法(一)

硬盘的结构一、物理结构:硬盘在物理结构上由头盘组件和控制电路板两大部分组成。 ㈠ 头盘组件头盘就是磁头和盘片的意思。头盘组件包括盘体、电机、磁头等部件。所有部件密封在外壳中,绝对无尘、真空,如果你一旦开启了这个密封外壳&#xff0…

七0二所与江南计算机研究所,江南大学:一所被低估的“211”大学,2个A+学科,丝毫不输985...

文/角角老师导语:江南大学,尽管是一所“211工程”大学,但,在外省学生的意识里,看名字就是“野鸡大学”或者“民办大学”。其实,江南大学,实力很强,而是很低调,在教育部第…

Facebook 如何管理150亿张照片

Facebook 的照片分享很受欢迎,迄今,Facebook 用户已经上传了150亿张照片,加上缩略图,总容量超过1.5PB,而每周新增的照片为2亿2000万张,约25TB,高峰期,Facebook 每秒处理55万张照片&a…

Kubernetes全栈架构师(资源调度上)--学习笔记

▲ 点击上方“DotNet NB”关注公众号回复“1”获取开发者路线图学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第171篇原创文章目录Replication Controller和ReplicaSet无状态服务Deployment概念Deployment的创建Deployment的更新Deployment的回滚Deployment扩容和缩容…

Python基础04 运算

原文:Python基础04 运算作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Python的运算符和其他语言类似 (我们暂时只了解这些运算符的基本用法,方便我们展开后面的内容&am…

求护士的心理阴影面积 | 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅(图源 叛逆行为艺术,侵权删)

RBAC 权限入门

RBAC 权限入门 RBAC概念 RBAC:Role Based Access Control,核心是用户只和角色关联,而某角色可以拥有各种各样的权限并可继承。 RBAC白话介绍 RBAC有很多模型,最简单的就是Core RBAC。说白了就是User用户, Role角色, Permission许可…

华为服务器如何用pe重装系统,教你华为u盘重装win10系统详细图文

华为笔记本电脑的外型真的很时尚,以及其轻薄便捷的特色,迅速吸引力一大波粉丝。目前的华为笔记本电脑使用的操作系统基本是win10系统了,win10系统升级经常出现错误,下面小编就给你讲解下U盘重装win10的方法。喜欢完游戏的朋友来说…

常用开源链接

MLDonkey/Emule 等服务器更新sever.met 点此更新 国内FreeBSD-FTP 连接 OSL FTP 镜像 Index of /FreeBSD/ports/amd64/packages-6-stable/net-p2p/ 连接 转载于:https://www.cnblogs.com/ableid/archive/2009/05/01/1447477.html

设计模式之建造者

建造者(生成器)模式含义:生成器模式是一种创建型模式,使你能够分步奏创建复杂对象,可使用相同的创建代码生成不同类型和形式的对象。看图我们就能很好地理解,图中就是工厂中的流水线模式,建造者就好比整条流水线&#…

第二次装OA系统

第二次安装:1、解压之后再MYOA目录下 找到一键安装.bat2、安装之后,一闪而过。(电脑上不需要apache,也不需要 mysql)3、192.168.1.111(自己电脑IP)看是否可以,若不可以①mysql_oa是否…

Hello RoboCupRescue(RCR)

还有15天在济南举行的中国机器人公开赛就要开始了,老师昨天突然通知让我加入学校的仿真机器人救援项目组,真是一项挑战。要知道,现在我们连平台都还不会用。

索尼服务器维护时间,索尼云服务器

索尼云服务器 内容精选换一换如果密码丢失、或创建时未设置密码,推荐您在控制台设置登录密码。更新后端云服务器,可修改字段为后端云服务器的名称和权重,可以为性能好的服务器设置更大的权重,用来接收更多的流量。如果后端云服务器…

刚刚,陶哲轩惨遭3个物理学家狠狠打脸,一条数学公式或将引起教科书改革

这波操作把数学界都炸懵了就在刚刚, 3 位物理学家联合数学天才、菲尔兹奖得主陶哲轩,彻底炸翻了数学界。左往右,彼得丹顿、斯蒂芬帕克、张西宁彼得丹顿(Peter B.Denton),美国布鲁克黑文国家实验室的助理物理…

教材管理系统紧张开发中

教材管理系统紧张开发中,系统也许不大,可是业务比较复杂、交叉性很强,教学计划、课程代码、教材、供货商、分校点、系部、教师、学生、库存、盘点、结算、数据采集、征订、订购、分发、收费一个都不能少!既有C/S三层又有Web模式&a…

Blazor 组件之间使用 EventCallback 进行通信

翻译自 Waqas Anwar 2021年3月28日的文章 《Communication between Blazor Components using EventCallback》 [1]Blazor 应用程序是相互交互的多个 Blazor 组件的集合,我们可以在其他父组件中使用子组件。在实际的应用程序中,将数据或事件信息从一个组件…

5.5 准备创建bean

5.5 准备创建bean 我们不可能指望在一个函数中完成一个复杂的逻辑,而且我们跟踪了这么多Spring代码,经历了这么多函数,或多或少也发现了一些规律:一个真正干活的函数其实是以do开头的,比如doGetObjectFromFactoryBean…

***教程十:数据库注入(上)

这一段的教程是笔者(这里应该叫整理者)由《***X档案》的教程中整理改编而来。不知道是什么时候,B/S结构的软件越来越普及。工程师们为了应对“用户皆白痴”的服务理念(就是把用户想像成什么都不会),所以更加…