CentOS6/7 配置守護進程

来源:https://www.cnblogs.com/chenyishi/archive/2022/11/01/16848621.html
-Advertisement-
Play Games

CentOS6.x CentOS6中轉用Upstrat代替以前的init.d/rcX.d的線性啟動方式。 一、相關命令 通過initctl help可以查看相關命令 [root@localhost ~]# initctl help Job commands: start Start job. sto ...


CentOS6.x

CentOS6中轉用Upstrat代替以前的init.d/rcX.d的線性啟動方式。

一、相關命令

通過initctl help可以查看相關命令

[root@localhost ~]# initctl help
Job commands:
  start                       Start job.
  stop                        Stop job.
  restart                     Restart job.
  reload                      Send HUP signal to job.
  status                      Query status of job.
  list                        List known jobs.

Event commands:
  emit                        Emit an event.

Other commands:
  reload-configuration        Reload the configuration of the init daemon.
  version                     Request the version of the init daemon.
  log-priority                Change the minimum priority of log messages from the init daemon
  usage                       Show job usage message if available.
  help                        display list of commands

For more information on a command, try `initctl COMMAND --help'.

 

二、自己配置一個

在/etc/init/文件夾中新建一個testserver.conf配置文件。

通過exec執行發佈出來的程式可執行文件。通過設置respawn讓程式反覆啟動。

start on runlevel [2345] stop on runlevel [!2345] respawn exec /usr/local/src/testserver/testserver

然後啟動

initctl reload-configuration 
initctl list 
initctl start testserver

通過initctl list即可看程式是不是處於running啟動狀態。

[root@localhost ~]# initctl list
vmware-tools start/running
rc stop/waiting
tty (/dev/tty3) start/running, process 3024
tty (/dev/tty2) start/running, process 3022
tty (/dev/tty6) start/running, process 3033
tty (/dev/tty5) start/running, process 3028
tty (/dev/tty4) start/running, process 3026
plymouth-shutdown stop/waiting
testserver start/running, process 4157
control-alt-delete stop/waiting
rcS-emergency stop/waiting
readahead-collector stop/waiting
kexec-disable stop/waiting
quit-plymouth stop/waiting
rcS stop/waiting
prefdm start/running, process 3017
init-system-dbus stop/waiting
ck-log-system-restart stop/waiting
readahead stop/waiting
ck-log-system-start stop/waiting
splash-manager stop/waiting
start-ttys stop/waiting
readahead-disable-services stop/waiting
ck-log-system-stop stop/waiting
rcS-sulogin stop/waiting
serial stop/waiting

可以看到其處於啟動狀態,現在守護進程已經設置成功。

另外,配置文件中可以通過script ... end script執行腳本。舉個例子

start on runlevel [2345]
stop on runlevel [!2345]
script 
echo “test~~~~~” >>/tmp/test.txt 
end script

CentOS7.x

Centos7中可以通過systemd配置守護進程。

一、Unit的含義

systemd可以管理所有系統資源,不同資源統稱為 Unit,一共分為12種:

Service unit:   系統服務
Target unit:    多個unit構成一個組
Device unit:    硬體設備
Mount unit:     文件系統的掛載點
Automount unit: 自動掛載點
Path unit:      文件或路徑
Scope unit:     不是由Systemd啟動的外部進程
Slice unit:     進程組
Snapshot unit:  Systemd快照,可以切回某個快照
Socket unit:    進程間通信的socket
Swap unit:      swap文件
Timer unit:     定時器

二、Unit管理常用命令(主要針對service)

# 開機自啟動
systemctl enable nginx

# 關閉自啟動
systemctl disable nginx

# 服務狀態
systemctl status nginx

# 服務重啟
systemctl restart nginx

# 殺死一個服務
systemctl kill nginx

# 顯示已啟動的服務
systemctl list-units --type=service

 

三、Unit配置文件

每一個Unit都有一個配置文件,用於告訴系統如何啟動Unit,systemd預設從 /etc/systemd/system/ 目錄讀取配置文件,

Unit配置文件目錄主要有三個:

/lib/systemd/system
/run/systemd/system
/etc/systemd/system

 

四、Unit服務配置

每個服務以.service尾碼,一般會分為3部分:[Unit],[Service],[Install],具體以nginx服務為例:

[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
 
#Restart配置可以在進程被kill掉之後,讓systemctl產生新的進程,避免服務掛掉
Restart=on-failure
RestartSec=30
 
[Install]
WantedBy=multi-user.target

1、[Unit]區塊

[Unit]區塊通常是配置文件的第一個區塊,用來定義Unit的元數據,以及配置與其他Unit的關係。

Description: 簡短描述
Documentation: 文檔地址
After:依賴,僅當依賴的服務啟動之後再啟動自定義的服務單元

2、[Service]區塊

[Service]區塊用來Service的配置,只有service類型的unit才有本區塊。

Type: 定義啟動時的進程行為。它有以下幾種值:

Type=simple  :(預設值) systemd認為該服務將立即啟動。服務進程不會 fork 。如果該服務要啟動其他服務,不要使用此類型啟動,除非該服務是 socket 激活型。
Type=forking :systemd認為當該服務進程 fork,且父進程退出後服務啟動成功。對於常規的守護進程(daemon),除非你確定此啟動方式無法滿足需求,使用此類型啟動即可。
               使用此啟動類型應同時指定 PIDFile=,以便 systemd 能夠跟蹤服務的主進程。
Type=oneshot :這一選項適用於只執行一項任務、隨後立即退出的服務。可能需要同時設置 RemainAfterExit=yes 使得 systemd 在服務進程退出之後仍然認為服務處於激活狀態。
Type=notify  :與 Type=simple 相同,但約定服務會在就緒後向 systemd 發送一個信號。這一通知的實現由 libsystemd-daemon.so 提供。
Type=dbus    :若以此方式啟動,當指定的 BusName 出現在DBus系統匯流排上時,systemd 認為服務就緒。
Type=idle    :systemd 會等待所有任務處理完成後,才開始執行 idle 類型的單元。其他行為與 Type=simple 類似。

其他選項:

ExecStart:     啟動服務的命令
ExecStartPre:  啟動服務之前執行的命令
ExecStartPost: 啟動服務之後執行的命令
ExecReload:    重啟服務執行時的命令
ExecStop:      停止服務時執行的命令
ExecStopPost:  停止服務之後執行的命令
RestartSec:    自動重啟服務間隔的秒數
Restart:       定義何種情況下會自動重啟服務,可能的值包括always(總是重啟)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
TimeoutSec:    定義Systemd停止服務之前等待的秒數
Environment:   指定環境變數
PIDFile:      pid文件路徑
PrivateTmp:   true表示給服務分配獨立的臨時空間
User:         執行命令的用戶
Group:        執行命令的組

3、[Install]區塊

[Install]區塊用來定義如何啟動,以及是否開機啟動。

WantedBy:   它的值是一個或多個Target,當前Unit激活時(enable)符號鏈接會放入/etc/systemd/system目錄下麵以Target名 + .wants尾碼構成的子目錄中
RequiredBy: 它的值是一個或多個Target,當前Unit激活時(enable)符號鏈接會放入/etc/systemd/system目錄下麵以Target名 + .required尾碼構成的子目錄中
Alias:      當前Unit可用於啟動的別名
Also:       當前Unit激活時(enable),會被同時激活的其他Unit

 

五、Target的概念

Target就是一個Unit組,包含許多相關Unit。啟動某個Target的時候,Systemd就會啟動裡面所有的Unit。

傳統init啟動模式裡面,有RunLevel的概念,跟Target的作用很類似。不同的是,RunLevel是互斥的,不可能多個RunLevel同時啟動,但是多個Target可以同時啟動。

Target的常用命令:

查看所有target下的unit
systemctl list-unit-files --type=target
 
查看預設target,即預設的運行級別。對應於舊的`runlevel`命令
systemctl get-default
 
設置預設的target
systemctl set-default multi-user.target
 
查看target下的unit
systemctl list-dependencies multi-user.target
 
切換target,不屬於新target的unit都會被停止
systemctl isolate multi-user.target

 

六、自己配置一個

/lib/systemd/system/目錄中定義一個自己的testserver.service文件

[Unit]
Description=testserver

[Service]
# 應用程式所在的文件目錄
WorkingDirectory=/usr/local/src/testserver/
ExecStart=/usr/local/src/testserver/testserver
Restart=always

# 如果服務崩潰,10秒後重新啟動服務
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=testserver
User=root

# Production:生產環境 Development:開發環境
# Environment=ASPNETCORE_ENVIRONMENT=Development


[Install]
WantedBy=multi-user.target  # 由此target觸發自啟動

 

通過以下命令實現啟動

systemctl daemon-reload

// 自動啟動 systemctl enable testserver.service

//立即啟動 systemctl start testserver.service
//狀態查看 systemctl status testserver.service

 

部分摘自

http://t.zoukankan.com/solohac-p-4154181.html

https://www.cnblogs.com/jkko123/p/12171572.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這不光棍節快到了,表弟準備寫一封情書給他的女神,想在光棍節之前脫單。 為了提高成功率,於是跑來找我給他參謀參謀,本來我是不想理他的,不過誰讓他是我表弟呢(請我洗jio),於是教給他程式員的終極浪漫絕招,先假裝給女神拍照,然後再把情書寫到她的照片上列印出來送給她,嘿嘿~ 實現步驟 想要實現把情書寫在像 ...
  • 前言 大家好,我是棧長。 最近,棧長又參加了騰訊雲小伙伴邀請的Techo Day 技術開放日 2.0的線上活動,這一期又是乾貨滿滿,主要是雲原生和微服務方面的,比如:雲原生網關、容器、安全、雲監控、灰度發佈等等,這些內容都與我們現有的微服務系統息息相關。 令棧長印象最深刻的就是微服務灰度發佈這個主題 ...
  • 在分散式系統盛行的今天,緩存充當著扛壓屏障的作用,一旦緩存出現問題,對系統影響也是致命的。本文我們一起聊聊如何安全且可靠的使用緩存,聊聊緩存擊穿、緩存雪崩、緩存穿透以及數據一致性、熱點數據淘汰機制等。 ...
  • 1.遍歷/匹配(foreach/find/match) Stream也是支持類似集合的遍歷和匹配元素的,只是Stream中的元素是以Optional類型存在的。Stream的遍歷、匹配非常簡單。 List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 7, ...
  • 1,JDK和JRE有什麼區別? JRE:Java Runtime Environment( java 運行時環境)。即java程式的運行時環境,包含了 java 虛擬機,java基礎類庫。 JDK:Java Development Kit( java 開發工具包)。即java語言編寫的程式所需的開發 ...
  • 作者:牛牛碼特 鏈接:https://juejin.cn/post/6844903929281511438 背景 緩存是軟體開發中一個非常有用的概念,資料庫緩存更是在項目中必然會遇到的場景。而緩存一致性的保證,更是在面試中被反覆問到,這裡進行一下總結,針對不同的要求,選擇恰到好處的一致性方案。 緩存 ...
  • 責任鏈模式(Chain of Responsibility Pattern)是將鏈中每一個節點看作是一個對象,每個節點處理的請求均不同,且內部自動維護一個下一節點對象。 ...
  • 為什麼會寫這篇文章?主要是因為項目中的代碼大量使用了帶virtual關鍵字的類,想通過本文淺談一下。virtual並沒有什麼超能力可以化腐朽為神奇,它有其存在的理由,但濫用它是一種非常不可取的錯誤行為。本文將帶你一步一步瞭解virtual機制,為你揭開virtual的神秘面紗。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...