博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net core入门之守护进程
阅读量:7027 次
发布时间:2019-06-28

本文共 2423 字,大约阅读时间需要 8 分钟。

hot3.png

打开Visual Studio,看.net core模板里只有控制台程序和web程序,那我们以前在windows上跑的windows service跑,那在CentOS上能不能做类似的实现呢?

当然可以,解决方案就是守护进程,百度到的守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母d就是Daemon的意思)

这次我选择的工具的是supervisor,下面我们首先安装一下吧,执行命令

# yum install supervisor# systemctl enable supervisord.service# systemctl start supervisord.service# systemctl status supervisord.service Loaded: loaded (/usr/lib/systemd/system/supervisord.service; enabled; vendor preset: disabled)   Active: active (running) since 六 2016-09-17 06:41:26 CST; 2h 54min ago  Process: 2667 ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf (code=exited, status=0/SUCCESS)

看到supervisord.service已经成功启动了,是不是觉得总是打命令太枯燥了呢,能用界面管理服务就很美妙了呢,很幸运的是,supervisor提供了这样的功能,修改/etc/supervisord.conf中的配置

[inet_http_server]         ; inet (TCP) server disabled by defaultport=*:9001        ; (ip_address:port specifier, *:port for all iface)

由上面的注释就可以看出原来是被禁用的,我只是把前面的分号去掉,即去掉注释,把原来的127.0.0.1:9001,修改为*:9001,允许各种可被访问的方式。 访问 supervisor管理界面 再看配置文件,看到了

[include]files = supervisord.d/*.ini

那我们修改为

[include]files = supervisord.d/*.conf

以后我们配置的服务都放在/etc/supervisord.d目录下,以后缀名conf结尾,就可以成为被supervisor管理的服务了,是不是很easy呢! 配置了这么久supervisor,是该干点正事了,费话不说,首先用定时器模拟我们在平常项目中定时执行某个任务,为了简单起见,我只是定时把当前时间输出到叫aa.txt中,代码如下

var fileName = "aa.txt";            if (File.Exists(fileName))            {                File.CreateText(fileName).Dispose();            }            using( var t = new Timer((o) =>            {                var currentTime =DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");                File.AppendAllText(fileName,$"{currentTime}{Environment.NewLine}");            }, null, 1000, 2000)            )            {               Console.Read();            }

我们把代码还写在我们上个hellodemo项目中,在开发测试环境没问题之后,新建hellodemo.conf, 配置如下

[program:hellodemo]command=dotnet hellodemo.dll ; 运行程序的命令directory=/hello ; 命令执行的目录autorestart=true ; 程序意外退出是否自动重启stderr_logfile=/var/log/hellodemo.err.log ; 错误日志文件stdout_logfile=/var/log/hellodemo.out.log ; 输出日志文件environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量user=root ; 进程执行

上传至/etc/supervisord.d,执行命令

# supervisorctl reloadRestarted supervisord

打开 supervisor管理界面 现在我们把hellodemo关掉,看看会不会自动重启,执行命令

# kill 7756 #杀掉进程

刷新supervisor管理界面 supervisor管理界面 可以看到已经自动重启了,那我们发版的时候是不是要把服务先关掉呢,在界面上直接点Stop, supervisor管理界面 好了,到此为止,大功告成了,赶快动手试试吧!

转载于:https://my.oschina.net/weidedong/blog/747428

你可能感兴趣的文章
nf_conntrack: table full, dropping packet. 问题
查看>>
(转)如何使用C#自定义属性
查看>>
hdu 1142 A Walk Through the Forest (最短路径)
查看>>
HLG 1475 国王的宴会【树形DP】
查看>>
AppScan扫描建议 问题集
查看>>
建造者模式
查看>>
在多线程环境下使用HttpWebRequest或者调用Web Service(连接报超时问题)
查看>>
Windows Live Write 日志客户端
查看>>
把123456789转换为12-345-6789的三种方法
查看>>
Mysql选择合适的存储引擎
查看>>
URAL 1225 Flags
查看>>
UVa 11172 - Relational Operator
查看>>
UVa 10179 - Irreducable Basic Fractions
查看>>
日常会议
查看>>
SCP,SSH应用
查看>>
The first day to learn Englisht
查看>>
第二章 单表查询 T-SQL语言基础(1)
查看>>
C#中给RichTextBox加上背景图片
查看>>
竞赛准备篇---(四)子集生成
查看>>
JQuery判断复选框是否有选中
查看>>