網站首頁 編程語言 正文
什么是守護進程
在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
安裝完成之后:
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 節點
然后就可以通過界面來查看運行的進程了:
測試一下
最后,我們測試一下是否會自動重啟,開機自動運行?
- 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、重啟機器,發現可以自動運行。
原文鏈接:https://www.cnblogs.com/zxtceq/p/14128633.html
相關推薦
- 2022-06-28 python神經網絡Keras構建CNN網絡訓練_python
- 2022-04-02 Android中Button實現點擊換圖案及顏色_Android
- 2022-08-15 Redis緩存三大異常的處理方案梳理總結_Redis
- 2022-08-10 C#并行編程Task類用法介紹_C#教程
- 2022-11-22 Python?arrow模塊使用方法_python
- 2022-09-10 Python?turtle庫(繪制螺旋正方形)_python
- 2022-11-18 React中props使用教程_React
- 2022-11-02 React?Native可復用?UI分離布局組件和狀態組件技巧_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支