.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管理界面 好了,到此爲止,大功告成了,趕快動手試試吧!

相關文章
相關標籤/搜索