.net core入门之守护进程

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

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

此次我选择的工具的是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 default
port=*:9001        ; (ip_address:port specifier, *:port for all iface)

由上面的注释就能够看出原来是被禁用的,我只是把前面的分号去掉,即去掉注释,把原来的127.0.0.1:9001,修改成*:9001,容许各类可被访问的方式。 访问http://192.168.91.128:9001/ supervisor管理界面 再看配置文件,看到了.net

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

那咱们修改成rest

[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, 配置以下code

[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,执行命令server

# supervisorctl reload
Restarted supervisord

打开 http://192.168.91.128:9001/ supervisor管理界面 如今咱们把hellodemo关掉,看看会不会自动重启,执行命令进程

# kill 7756 #杀掉进程

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

相关文章
相关标签/搜索