咨询区

  • 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 ,简单方便快捷。

如何让 dotnetcore 在 Linux 上后台运行?相关推荐

  1. Linux上后台运行python脚本,并查看脚本日志

    ps -ef | grep xxx.py #查看xxx.py脚本是否在运行#后台运行xxx.py脚本,并输出日志到nohup.out文件,当前命令这个文件与xxx.py位置在一个目录下 nohup p ...

  2. Linux在后台运行python程序、脚本程序、可执行程序等,关闭终端仍可保持程序运行

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 Linux在后台运行python程序.脚本程序.可执行程序等,关闭终端仍可保持程序运行 文章目录: 1 为什么需要后台运 ...

  3. 用以促学——Linux进程后台运行的原理、方法、比较及其实现

    用以促学--Linux进程后台运行的原理.方法.比较及其实现 文章目录 用以促学--Linux进程后台运行的原理.方法.比较及其实现 前言 相关基础知识 应用场景 问题所在 linux概念说明 ses ...

  4. 【Linux系统理论操作学习26】LInux的后台运行,重定向输出,前后台进程转换和管理

    1 输出的后台运行 1.1 简单后台运行 nohup表示程序不被挂起 &表示后台运行程序 如果说使用&,就会出现问题:后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程 ...

  5. linux scp 后台运行,Linux scp 设置nohup后台运行

    Linux scp 设置nohup后台运行 1.正常执行scp命令 从oradb30机器拷贝一个文件夹到oradb31机器: scp -r /u01/media/Disk1/ 192.168.1.31 ...

  6. linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间

    1 linux上根据运行程序的进程号,查看程序所在的绝对路径 1.如下,我想查看python 25_run_train_tripletloss_sknet_8w_offline_c_plus.py 这 ...

  7. linux python3运行,将Python3安装到Linux上并运行

    将Python3安装到Linux上并运行 使用win10开发一个很好的python项目并把它部署到Linux中,有一个问题需要解决:如何在Linux中运行py文件? 以LunixCentOS7.x平台 ...

  8. Linux 进程后台运行

    Linux 进程后台运行 1.进程在当前终端后台运行.(关闭终端后进程自动退出) sh test.sh &注:运行进程后跟 "&" 2.进程长期后台运行不受终端关闭 ...

  9. 安卓游戏应用如何在linux上流畅运行

    卓懿移动应用兼容运行环境(以下简称"卓懿")突破了应用生态发展的传统思路,让成熟的商业应用和行业应用成为国产平台应用生态的一部分.卓懿集成了应用商城,能够解决用户的多样化需求,用户 ...

最新文章

  1. eclipse MAT分析heap dump
  2. 树莓派被曝开春上市,估值高于5亿美元,收入主要来源于生产版权费
  3. JS遮罩插件 -- JqLoad
  4. oracle配置ipv6_pl/sql developer通过IPV6连接oracle-阿里云开发者社区
  5. 因子分析怎么计算权重?
  6. iPhone MSN评测报告
  7. vue调整图标的大小_Vuetify图标大小
  8. 25岁女生,转行学前端合适吗?
  9. 腾讯云-语音指定模板-电话告警通知
  10. python表示差值_Python-dataframe的对应列求差值
  11. C++ 模板函数的使用
  12. 微信公众号菜单外链怎么做
  13. java语言如何求平方根
  14. wpdec函数_BP神经网络滚动轴承故障诊断研究
  15. 一个正方形截取四分之一后如何四等分
  16. 软件测试学习(二)需求分析阶段
  17. 江苏省高中计算机课程标准,江苏省普通高中课程设置
  18. 电感电容电解电容测量仪
  19. 【小波能量BP】基于小波能量系数提取和BP神经网络的检测算法matlab仿真
  20. 动态规划——零钱兑换问题

热门文章

  1. ALV Styles in Field catalogue using OOPS
  2. 自动以及手动清除手机垃圾文件
  3. 这段代码什么意思啊?
  4. Yahoo网站性能最佳体验的34条黄金守则
  5. 冒名者还是重名?疑惑中!
  6. 海鸥表表带太长了怎么拆_表带安装,表带太长了,怎么拆解和安装?
  7. RabbitMQ 入门教程(PHP版) 第三部分:发布/订阅(Publish/Subscribe)
  8. 利用airTest的图像实别技术测试Web应用
  9. 4.Linux的目录结构
  10. [cf797c]Minimal string(贪心+模拟)