1. 程式人生 > >ASP.NET Core Linux下為 dotnet 建立守護程序(必備知識)

ASP.NET Core Linux下為 dotnet 建立守護程序(必備知識)

前言

上篇文章中介紹瞭如何在 Docker 容器中部署我們的 asp.net core 應用程式,本篇主要是怎麼樣為我們在 Linux 或者 macOs 中部署的 dotnet 程式建立一個守護程序,來保證我們的程式在異常或者是電腦重啟的時候仍然能夠正常訪問。

如果你以後用準備使用 asp.net core來開發專案的話,程式並且部署到 Linux 上的話,那麼此篇文章你值得收藏。
如果你覺得對你有幫助的話,不妨點個【推薦】。

目錄

  • 什麼是守護程序
  • Supervisor 介紹
  • Supervisor 安裝
  • Supervisor 配置,常用命令
  • Supervisor UI管理臺

什麼是守護程序

在linux或者unix作業系統中,守護程序(Daemon)是一種執行在後臺的特殊程序,它獨立於控制終端並且週期性的執行某種任務或等待處理某些發生的事件。由於在linux中,每個系統與使用者進行交流的介面稱為終端,每一個從此終端開始執行的程序都會依附於這個終端,這個終端被稱為這些程序的控制終端,當控制終端被關閉的時候,相應的程序都會自動關閉。但是守護程序卻能突破這種限制,它脫離於終端並且在後臺執行,並且它脫離終端的目的是為了避免程序在執行的過程中的資訊在任何終端中顯示並且程序也不會被任何終端所產生的終端資訊所打斷。它從被執行的時候開始運轉,直到整個系統關閉才退出。

此處的建立守護程序,是指釋出在Linux上 asp.net core 程式的dotnet xxx.dll

命令的宿主程序建立一個守護程序。

在 Linux 上有很多可以管理程序的工具,我們使用 Supervisor 來做這個事情。
原因有兩點:
1、它是微軟官方文件推薦的,降低學習成本。
2、它並不一定是最好的,但一定是文件最全的。

Supervisor 介紹

Supervisor是採用 Python(2.4+) 開發的,它是一個允許使用者管理 基於 Unix 系統程序的 Client/Server 系統,提供了大量功能來實現對程序的管理。

Supervisor 安裝

在 masOS 中直接使用brew工具進行安裝即可:
brew install supervisor

在 linux 中使用以下命令進行安裝:

ubuntu
sudo apt-get install supervisor

centos
yum install supervisor

python
pip install supervosor
easy_install supervisor

安裝完成之後:

image

mac:~ yangxiaodong$ brew install supervisor
Warning: supervisor-3.2.1 already installed

Supervisor 配置,常用命令

安裝完成之後,在 /ect/supervisor/conf.d/ 目錄下新建一個配置檔案(touch HelloWebApp.conf),取名為 HelloWebApp.conf

開啟HelloWebApp.conf (vim HelloWebApp.conf),寫入如下命令:

[program:HelloWebApp]
command=dotnet HelloWebApp.dll  #要執行的命令
directory=/home/yxd/Workspace/publish #命令執行的目錄
environment=ASPNETCORE__ENVIRONMENT=Production #環境變數
user=www-data  #程序執行的使用者身份
stopsignal=INT
autostart=true #是否自動啟動
autorestart=true #是否自動重啟
startsecs=1 #自動重啟間隔
stderr_logfile=/var/log/HelloWebApp.err.log #標準錯誤日誌
stdout_logfile=/var/log/HelloWebApp.out.log #標準輸出日誌

配置好以後 (:wq儲存退出),需要重新載入一下配置

sudo supervisorctl shutdown && sudo supervisord -c /etc/supervisor/supervisord.conf

或者你可以直接重啟 Supervisor:

sudo service supervisor stop
sudo service supervisor start

如果啟動的時候報錯,可以開啟位於/etc/log/supervisor/supervisord.log檔案來檢視具體的日誌。

其中dotnet 命令輸出的日誌檔案分別為位於

/var/log/HelloWebApp.err.log
/var/log/HelloWebApp.out.log

在這些檔案裡面你可以檢視程式中的異常資訊或者是執行資訊。

開啟瀏覽器,輸入 http://localhost:5000 發現已經可以瀏覽了。

Supervisor 常用命令

supervisorctl shutdown #關閉所有任務

supervisorctl stop|start program_name

supervisorctl status #檢視所有任務狀態

Supervisor UI 管理臺

Supervisor 預設給我們提供了一個圖形介面來供我們管理程序和任務,在 macOS 中預設配置的有,但是在 Linux 中我們需要手動開啟一下。

開啟位於/etc/supervisor/supervisord.conf檔案,新增inet_http_server 節點

image

然後就可以通過介面來檢視執行的程序了:

image

測試一下

最後,我們測試一下是否會自動重啟,開機自動執行?

1、程序管理中幹掉dot net ,發現可以重新啟動。以下是日誌:

2016-07-09 12:24:18,626 INFO spawned: 'HelloWebApp' with pid 1774
2016-07-09 12:24:19,766 INFO success: HelloWebApp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2016-07-09 12:27:43,208 INFO exited: HelloWebApp (exit status 0; expected)
2016-07-09 12:27:44,223 INFO spawned: 'HelloWebApp' with pid 3687
2016-07-09 12:27:45,243 INFO success: HelloWebApp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

2、重啟機器,發現可以自動執行。

相關推薦

ASP.NET Core Linux dotnet 建立守護程序必備知識

前言 在上篇文章中介紹瞭如何在 Docker 容器中部署我們的 asp.net core 應用程式,本篇主要是怎麼樣為我們在 Linux 或者 macOs 中部署的 dotnet 程式建立一個守護程序,來保證我們的程式在異常或者是電腦重啟的時候仍然能夠正常訪問。 如果你以後用準備使用 asp.net core

ASP.NET Core Linux dotnet 創建守護進程必備知識

linux中 ice -s 收藏 lin 守護 shutdown stderr spn 原文:ASP.NET Core Linux下為 dotnet 創建守護進程(必備知識)前言 在上篇文章中介紹了如何在 Docker 容器中部署我們的 asp.net core 應用程

ASP.NET Core 中文文件 第四章 MVC4.6Areas區域

Areas 是 ASP.NET MVC 用來將相關功能組織成一組單獨名稱空間(路由)和資料夾結構(檢視)的功能。使用 Areas 建立層次結構的路由,是通過新增另一個路由引數 area 到 Controller 和 action。 Areas 提供了一種把大型 ASP.NET Core MVC Web 應用

ASP.NET Core 中文文件 第五章 測試5.2整合測試

整合測試確保應用程式的元件組裝在一起時正常工作。 ASP.NET Core支援使用單元測試框架和可用於處理沒有網路開銷請求的內建測試的網路主機整合測試。 章節: 整合測試介紹 整合測試驗證應用程式不同的部位是否正確地組裝在一起。不像單元測試,整合測試經常涉及到應用基礎設施,如資料庫,檔案系統,網路資源

ASP.NET Core 中文文件 第四章 MVC4.2控制器操作的路由

ASP.NET Core MVC 使用路由 中介軟體 來匹配傳入請求的 URL 並對映到具體的操作。路由通過啟動程式碼或者特性定義。路由描述 URL 路徑應該如何匹配到操作。路由也同樣用於生成響應中返回的 URL(用於連結)。 這篇文章將解釋 MVC 和路由之間的相互作用,以及典型的 MVC 應用程式如何使

ASP.NET Core 中文文件 第四章 MVC4.1Controllers, Actions 和 Action Results

Action 和 action result 是開發者使用 ASP.NET MVC 構建應用程式的基礎部分。 什麼是 Controller 在 ASP.NET MVC 中, 控制器( Controller  )用於定義和聚合操作(Action)的一個集合。操作( 或操作方法 )是控制器中處理入站請求的一個方

ASP.NET Core 中文文件 第四章 MVC2.3格式化響應資料

ASP.NET Core MVC 內建支援對相應資料(response data)的格式化,用來修正格式或生成客戶端指定的格式。 特定格式的操作結果 某些操作結果(Action result)的型別是指定的特定格式,比如 JsonResult 或 ContentResult。Action 可以返回格式化為

ASP.NET Core 中文文件 第四章 MVC4.4依賴注入和控制器

ASP.NET Core MVC 控制器應通過它們的構造器明確的請求它們的依賴關係。在某些情況下,單個控制器的操作可能需要一個服務,在控制器級別上的請求可能沒有意義。在這種情況下,你也可以選擇將服務作為 action 方法的引數。 章節: 依賴注入 依賴注入(Dependency injection,

ASP.NET Core 中文文件 第四章 MVC4.3過濾器

ASP.NET MVC 過濾器 可在執行管道的前後特定階段執行程式碼。過濾器可以配置為全域性有效、僅對控制器有效或是僅對 Action 有效。 過濾器如何工作? 不同的過濾器型別會在執行管道的不同階段執行,因此它們各自有一套適用場景。根據你實際要解決的問題以及在請求管道中執行的位置來選擇建立不同的過濾器。

ASP.NET Core 中文文件 第四章 MVC3.8檢視中的依賴注入

ASP.NET Core 支援在檢視中使用 依賴注入 。這將有助於提供檢視專用的服務,比如本地化或者僅用於填充檢視元素的資料。你應該儘量保持控制器和檢視間的關注點分離(separation of concerns)。你的檢視所顯示的大部分資料應該從控制器傳入。 章節: 一個簡單的示例 你可以使用 @i

ASP.NET Core 中文文件 第四章 MVC3.7 區域性檢視partial

ASP.NET Core MVC 支援區域性檢視,當你需要在多個不同檢視間重用同一個頁面部件時會顯得特別有用。 什麼是區域性檢視? 區域性檢視是在其它檢視中被渲染的檢視。區域性檢視執行後生成的 HTML 結果會被渲染到呼叫方檢視或父檢視中。跟檢視檔案一樣,區域性檢視檔案也使用 .cshtml 作為副檔名。

ASP.NET Core 中文文件 第四章 MVC4.5測試控制器邏輯

ASP.NET MVC 應用程式的控制器應當小巧並專注於使用者介面。涉及了非 UI 事務的大控制器更難於測試和維護。 章節: 為什麼要測試控制器 控制器是所有 ASP.NET Core MVC 應用程式的核心部分。因此,你應當確保它們的行為符合應用的預期。 自動化測試可以為你提供這樣的保障並能夠在進入生

ASP.NET Core 中文文件 第四章 MVC3.9檢視元件

章節: 介紹檢視元件 檢視元件是 ASP.NET Core MVC 中的新特性,與區域性檢視相似,但是它們更加的強大。檢視元件不使用模型繫結,只取決於呼叫它時所提供的資料。檢視元件有以下特點: 渲染一個塊,而不是整個響應 在控制器和檢視之間同樣包含了關注點分離和可測試性帶來的好處 可以擁有引數和業務邏

ASP.NET Core 靜態檔案及JS包管理器npm, Bower的使用

在 ASP.NET Core 中新增靜態檔案 雖然ASP.NET主要大都做著後端的事情,但前端的一些靜態檔案也是很重要的。在ASP.NET Core中要啟用靜態檔案,需要Microsoft.AspNetCore.StaticFiles元件。可以通過Nuget新增,或者在project

asp.net core系列 30 EF管理數據庫架構--必備知識 遷移

數據文件 ive zh-cn .json 工作 database www 丟失 let 原文:asp.net core系列 30 EF管理數據庫架構--必備知識 遷移一.管理數據庫架構概述 EF Core 提供兩種主要方法來保持 EF Core 模型和數

ASP.NET CORE Linux發布工具文件對比 只上傳差異文件;自動啟停WebServer命令;上傳完成自動預熱WebServer

pps 手動更新 ftpclient centos paths config AS direct tco 最近這幾日在搞一個小網站:教你啊 ;(感興趣的朋友可以來捧場,在這個網站上有任何消費我都可以退還)由於更新頻繁,手動更新特別麻煩,於是開發了這個小工具用了一段時間,還是

ASP.NET Core中使用表示式樹建立URL

當我們在ASP.NET Core中生成一個action的url會這樣寫: var url=_urlHelper.Action("Index", "Home"); 這樣的寫法存在的問題在於我們傳遞了兩個字串型別的引數,而我們又無法避免對action和controller做重新命名操作, 例如將index重新命名

ASP.NET Core 打造一個簡單的圖書館管理系統 基本模型以及數據庫的建立

allow shel 系列 sqlserver rar 刪除數據庫 mvc 5 字段 約定 前言: 本系列文章主要為我之前所學知識的一次微小的實踐,以我學校圖書館管理系統為雛形所作。 本系列文章主要參考資料: 微軟文檔:https://docs.microsoft.c

ASP.NET Core 打造一個簡單的圖書館管理系統 基本模型以及資料庫的建立

前言: 本系列文章主要為我之前所學知識的一次微小的實踐,以我學校圖書館管理系統為雛形所作。 本系列文章主要參考資料: 微軟文件:https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/?view=aspnetcore-2.1&ta