如何让 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 上后台运行?相关推荐
- Linux上后台运行python脚本,并查看脚本日志
ps -ef | grep xxx.py #查看xxx.py脚本是否在运行#后台运行xxx.py脚本,并输出日志到nohup.out文件,当前命令这个文件与xxx.py位置在一个目录下 nohup p ...
- Linux在后台运行python程序、脚本程序、可执行程序等,关闭终端仍可保持程序运行
欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 Linux在后台运行python程序.脚本程序.可执行程序等,关闭终端仍可保持程序运行 文章目录: 1 为什么需要后台运 ...
- 用以促学——Linux进程后台运行的原理、方法、比较及其实现
用以促学--Linux进程后台运行的原理.方法.比较及其实现 文章目录 用以促学--Linux进程后台运行的原理.方法.比较及其实现 前言 相关基础知识 应用场景 问题所在 linux概念说明 ses ...
- 【Linux系统理论操作学习26】LInux的后台运行,重定向输出,前后台进程转换和管理
1 输出的后台运行 1.1 简单后台运行 nohup表示程序不被挂起 &表示后台运行程序 如果说使用&,就会出现问题:后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程 ...
- linux scp 后台运行,Linux scp 设置nohup后台运行
Linux scp 设置nohup后台运行 1.正常执行scp命令 从oradb30机器拷贝一个文件夹到oradb31机器: scp -r /u01/media/Disk1/ 192.168.1.31 ...
- linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
1 linux上根据运行程序的进程号,查看程序所在的绝对路径 1.如下,我想查看python 25_run_train_tripletloss_sknet_8w_offline_c_plus.py 这 ...
- linux python3运行,将Python3安装到Linux上并运行
将Python3安装到Linux上并运行 使用win10开发一个很好的python项目并把它部署到Linux中,有一个问题需要解决:如何在Linux中运行py文件? 以LunixCentOS7.x平台 ...
- Linux 进程后台运行
Linux 进程后台运行 1.进程在当前终端后台运行.(关闭终端后进程自动退出) sh test.sh &注:运行进程后跟 "&" 2.进程长期后台运行不受终端关闭 ...
- 安卓游戏应用如何在linux上流畅运行
卓懿移动应用兼容运行环境(以下简称"卓懿")突破了应用生态发展的传统思路,让成熟的商业应用和行业应用成为国产平台应用生态的一部分.卓懿集成了应用商城,能够解决用户的多样化需求,用户 ...
最新文章
- eclipse MAT分析heap dump
- 树莓派被曝开春上市,估值高于5亿美元,收入主要来源于生产版权费
- JS遮罩插件 -- JqLoad
- oracle配置ipv6_pl/sql developer通过IPV6连接oracle-阿里云开发者社区
- 因子分析怎么计算权重?
- iPhone MSN评测报告
- vue调整图标的大小_Vuetify图标大小
- 25岁女生,转行学前端合适吗?
- 腾讯云-语音指定模板-电话告警通知
- python表示差值_Python-dataframe的对应列求差值
- C++ 模板函数的使用
- 微信公众号菜单外链怎么做
- java语言如何求平方根
- wpdec函数_BP神经网络滚动轴承故障诊断研究
- 一个正方形截取四分之一后如何四等分
- 软件测试学习(二)需求分析阶段
- 江苏省高中计算机课程标准,江苏省普通高中课程设置
- 电感电容电解电容测量仪
- 【小波能量BP】基于小波能量系数提取和BP神经网络的检测算法matlab仿真
- 动态规划——零钱兑换问题
热门文章
- ALV Styles in Field catalogue using OOPS
- 自动以及手动清除手机垃圾文件
- 这段代码什么意思啊?
- Yahoo网站性能最佳体验的34条黄金守则
- 冒名者还是重名?疑惑中!
- 海鸥表表带太长了怎么拆_表带安装,表带太长了,怎么拆解和安装?
- RabbitMQ 入门教程(PHP版) 第三部分:发布/订阅(Publish/Subscribe)
- 利用airTest的图像实别技术测试Web应用
- 4.Linux的目录结构
- [cf797c]Minimal string(贪心+模拟)