Linux 守護進程


什么是守護進程

脫離控制終端的,運行於后端的進程,由系統管理的,按計划自動啟動/停止/重啟,用以執行特定的任務。

為什么要有守護進程?

在某些需求場景下,我們希望某項系統任務能夠按計划按預期,始終/自動 保持正常運行狀態,以便於持續提供服務功能。

一個小栗子,假如,我們部署一個站點服務,當服務器操作系統自動重啟后,我們希望部署的站點服務也能夠自動啟動,無需人工去啟動。

再舉一個小栗子,假如,以上部署的站點服務,遇到運行錯誤異常后能夠自動重啟,以保持正常運行狀態,無需人工干預。

再舉一個小栗子,假如,某些服務,我們希望它,在每天的凌晨自動啟動並運行,在每天的凌晨5點自動關閉,無需人工干預。

脫離終端的后台進程

不依賴於任何終端,不因連接終端的變化而對進程的運行產生關聯或影響,與當前環境隔離開來,讓程序本身能夠自動進入后台運行。以便於讓管理員可以在終端繼續處理其它工作。

 

init daemon 方式

簡介

當系統啟動后,這時候,我們希望能夠自動處理一些事情,那么Linux中提供了 init.d,它會在系統啟動后自動運行。

我們寫一個命令腳本,用於啟動對應的應用程序。那么這串腳本就可以以文件的方式,創建於 /etc/init.d 目錄下。當被啟動后的系統自動運行后,完成自動啟動。

一般Linux安裝的應用程序會提供此文件,其中包含 啟動/停止/狀態 等的命令 或應用本身的配置項,把此文件復制到 /etc/init.d/ 目錄下,加入自啟動,當系統的init運行后,對應的應用程序腳本會被執行並啟動服務。

案例

以 MySql8 為例,官方提供的文件在安裝目錄 mysql/support-files/mysql.server,把 mysql.server 復制到 /etc/init.d/ 目錄下。
加入系統自啟動:

1 chkconfig --add {filename}
2 chkconfig {filename} on 

可以通過以下命令手動管理服務狀態:

  • 啟動:service {filename} start      等同於  /etc/init.d/{filename} start
  • 停止:service {filename} stop      等同於  /etc/init.d/{filename} stop
  • 重啟:service {filename} restart   等同於  /etc/init.d/{filename} restart
  • 查看:service {filename} status    等同於  /etc/init.d/{filename} status

 

system daemon 方式

簡介

通常稱為 systemd,以文件形式,以 .service 為后綴,創建於 /usr/lib/systemd/system/ 目錄下。

文件中的配置項包含:服務描述、啟動順序、啟動用戶角色、啟動類型、啟動 / 停止 / 重啟、重啟模式、重啟間隔、超時設置 等
(可參考同目錄下其它文件的配置格式)

常用操作命令

啟動一個服務 systemctl start {filename}.service
重啟一個服務 systemctl restart {filename}.service
重載一個服務配置 systemctl reload {filename}.service
重載所有修改過的配置 systemctl daemon-reload
關閉一個服務 systemctl stop {filename}.service
顯示服務狀態 systemctl status {filename}.service
設置開機啟動 systemctl enable {filename}.service
關閉開機啟動 systemctl disable {filename}.service
啟動失敗的服務列表 systemctl --failed
查看服務活動詳細列表 systemctl list-units
列出服務配置文件狀態 systemctl list-unit-files
查看服務是否開機啟動 systemctl is-enabled {filename}.service
查看服務是否運行狀態 systemctl is-active {filename}.service
查看服務是否啟動失敗 systemctl is-failed {filename}.service
終止一個服務及子進程 systemctl kill {filename}.service
遠程操作某個服務狀態 systemctl -H {username}@{IP} {active} {filename}.service

為此,可以利用以上設置對一個服務的管理。

 

crond 定時任務

簡介

周期性的運行或等待處理某些任務的一個Linux進程。特定時間/定時/間隔 運行指定的應用程序。相當於Windows的計划任務。

Linux crond 命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。

Linux crond 工作主要分為以下兩類:

  • 系統需要的,自動執行的;如:備份系統數據、清理緩存
  • 個人需要的,配置執行的;如:用戶指定運行的應用程序

配置

以下闡述 [個人配置執行] 的定時任務。

用 cat 命令打開 /etc/crontab,我們來看下配置文件的結構如下:

 1 SHELL=/bin/bash
 2 PATH=/sbin:/bin:/usr/sbin:/usr/bin
 3 MAILTO=root
 4 
 5 # For details see man 4 crontabs
 6 
 7 # Example of job definition:
 8 # .---------------- minute (0 - 59)
 9 # |  .------------- hour (0 - 23)
10 # |  |  .---------- day of month (1 - 31)
11 # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
12 # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
13 # |  |  |  |  |
14 # *  *  *  *  * user-name  command to be executed

從 行7 [Example of job definition:] 以下的描述得知:

有 分 / 時 / 日 / 月 / 周 的時間配置項,並指定運行的用戶和應用程序命令。

[ * ]:代表該位置單位內的所有值,如:月份中的 1 - 31

[ , ]:代表指定單位多值的間隔符,如:分鍾中的 3,8,13,25 四個值

[ - ]:代表指定單位中的范圍取值,如:日中的 1 - 10 號

[ / ]:代表指定單位中設定的間隔值,如:小時中的 */2 , 斜杠后表示每2小時

案例

配置案例1:每分鍾都執行

 * * * * * /bin/appname 

配置案例2:每個月的 1-5 號的 [7:50] 執行

 50 7 1-5 * * /bin/appname 

配置案例3:每月的1號和15號凌晨執行

 0 0 1,15 * * /bin/appname 

配置案例4:每月每隔10天 的6:30分 執行一次,也就是1、11、21、31號

 30 6 */10 * * /bin/appname 

配置案例5:每周工作日的凌晨3點鍾執行

 00 03 * * 1-5 /bin/appname 

 

其它守護進程方式持續更新...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM