国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

Linux項(xiàng)目開發(fā),你必須了解Systemd服務(wù)!

發(fā)布時(shí)間:2024-6-18 17:26    發(fā)布者:武漢萬象奧科
關(guān)鍵詞: Linux
1. Systemd 簡介
Systemd是什么,以前l(fā)inux系統(tǒng)啟動init機(jī)制,由于init一方面對于進(jìn)程的管理是串行化的,容易出現(xiàn)阻塞情況,另一方面init也僅僅是執(zhí)行啟動腳本,并不能對服務(wù)本身進(jìn)行更多的管理。Systemd就是為了解決這些問題而誕生的。它的設(shè)計(jì)目標(biāo)是,為系統(tǒng)的啟動和管理提供一套完整的解決方案,根據(jù)Linux慣例,字母d是守護(hù)進(jìn)程(daemon)的縮寫,Systemd這個名字的含義,就是它要守護(hù)整個系統(tǒng)。使用了Systemd,就不需要再用init了。Systemd取代了initd,成為系統(tǒng)的第一個進(jìn)程(PID 等于 1),其他進(jìn)程都是它的子進(jìn)程。
Systemd是目前Linux系統(tǒng)上主要的系統(tǒng)守護(hù)進(jìn)程管理工具,有如下特點(diǎn):
1.支持并行化任務(wù)
2.同時(shí)采用socket式與D-Bus總線式激活服務(wù);
3.按需啟動守護(hù)進(jìn)程(daemon);
4.利用Linux的cgroups監(jiān)視進(jìn)程;
5.支持快照和系統(tǒng)恢復(fù);
6.維護(hù)掛載點(diǎn)和自動掛載點(diǎn);
7.各服務(wù)間基于依賴關(guān)系進(jìn)行精密控制。
Systemd可以管理所有系統(tǒng)資源,不同的資源統(tǒng)稱為 Unit(單元),Unit一共分成以下12種。
1.Service:裝守護(hù)進(jìn)程的啟動、停止、重啟和重載操作,是最常見的一種 Unit 文件
2.Target:多個Unit構(gòu)成的一個邏輯組,用于對 Unit 文件進(jìn)行邏輯分組,引導(dǎo)其它 Unit 的執(zhí)行。它替代了 SysV-init 運(yùn)行級別的作用,并提供更靈活的基于特定設(shè)備事件的啟動方式
3.Device:硬件設(shè)備,主要用于定義設(shè)備之間的依賴關(guān)系
4.Mount:文件系統(tǒng)的掛載點(diǎn),可以替代過去的 /etc/fstab 配置文件
5.Automount:自動掛載點(diǎn),相當(dāng)于 SysV-init 的 autofs 服務(wù)
6.Path:用于監(jiān)控指定文件或路徑的變化,并觸發(fā)其它 Unit 運(yùn)行
7.Scope:不是用戶創(chuàng)建的,而是 Systemd 運(yùn)行時(shí)產(chǎn)生的,描述一些系統(tǒng)服務(wù)的分組信息
8.Slice:進(jìn)程組,用于表示一個 CGroup 的樹,通常也不是用戶創(chuàng)建的
9.Snapshot:Systemd快照,可以切回某個快照
10. Socket:監(jiān)控來自于系統(tǒng)或網(wǎng)絡(luò)的數(shù)據(jù)消息,用于實(shí)現(xiàn)基于數(shù)據(jù)自動觸發(fā)服務(wù)啟動
11. Swap:虛擬內(nèi)存的交換分區(qū)
12. Timer Unit:定時(shí)器,用于配置在特定時(shí)間觸發(fā)的任務(wù),替代了 Crontab 的功能
2. Systemd Service配置文件
每一個被管理單元(Unit)都需要有一個配置文件用于告知systemd對于該單元(Unit)的管理方式。Systemd默認(rèn)從目錄/etc/systemd/system/讀取配置文件,但是里面存放的大部分文件都是符號鏈接,指向目錄/lib/systemd/system,配置文件存放于/lib/systemd/system/,開機(jī)啟動后會在/etc/systemd/system目錄建立軟鏈接文件,systemctl enable命令用于在/etc/systemd/system/與/lib/systemd/system/兩個目錄之間建立符號鏈接關(guān)系。systemctl disable命令用于在兩個目錄之間撤銷符號鏈接關(guān)系,相當(dāng)于撤銷開機(jī)啟動。配置文件的后綴名,就是該Unit的種類,比如sshd.socket;如果命令行中省略后綴名,Systemd默認(rèn)后綴名為.service,所以當(dāng)systemctl enable sshd會被理解成systemctl enable sshd.service。
以sshd.service的配置為例,可用”systemctl cat sshd.service” 命令查看sshd服務(wù)的配置文件:
# /lib/systemd/system/ssh.service​[Unit]Description=OpenBSD Secure Shell serverDocumentation=man:sshd(8) man:sshd_config(5)After=network.target auditd.serviceConditionPathExists=!/etc/ssh/sshd_not_to_be_run​​[Service]EnvironmentFile=-/etc/default/sshExecStartPre=/usr/sbin/sshd -tExecStart=/usr/sbin/sshd -D $SSHD_OPTSExecReload=/usr/sbin/sshd -tExecReload=/bin/kill -HUP $MAINPIDKillMode=processRestart=on-failureRestartPreventExitStatus=255Type=notifyRuntimeDirectory=sshdRuntimeDirectoryMode=0755​​[Install]WantedBy=multi-user.targetAlias=sshd.service
通常一個service服務(wù)單元的配置包含3個區(qū)塊:Unit,Service和Install。
2.1      Unit區(qū)塊
[Unit]區(qū)塊通常是配置文件的第一個區(qū)塊,用來定義 Unit 的元數(shù)據(jù),以及配置與其他 Unit 的關(guān)系。它的主要字段如下:
Description:簡短描述
Documentation:文檔地址
Requires:當(dāng)前Unit依賴的其他Unit,如果它們沒有運(yùn)行,當(dāng)前Unit會啟動失敗
Wants:與當(dāng)前Unit配合的其他Unit,如果它們沒有運(yùn)行,當(dāng)前Unit不會啟動失敗
BindsTo:與Requires類似,它指定的 Unit 如果退出,會導(dǎo)致當(dāng)前Unit停止運(yùn)行
Before:如果該字段指定的Unit也要啟動,那么必須在當(dāng)前Unit之后啟動
After:如果該字段指定的Unit也要啟動,那么必須在當(dāng)前Unit之前啟動
Conflicts:這里指定的Unit 不能與當(dāng)前Unit同時(shí)運(yùn)行
Condition...:當(dāng)前Unit運(yùn)行必須滿足的條件,否則不會運(yùn)行
Assert...:當(dāng)前Unit運(yùn)行必須滿足的條件,否則會報(bào)啟動失敗
2.2      Service區(qū)塊
[Service]區(qū)塊用來Service的配置,只有Service類型的Unit才有這個區(qū)塊。它的主要字段如下:
Type:定義啟動時(shí)的進(jìn)程行為。它有以下幾種值。
Type=simple:默認(rèn)值,執(zhí)行ExecStart指定的命令,啟動主進(jìn)程
Type=forking:以fork方式從父進(jìn)程創(chuàng)建子進(jìn)程,創(chuàng)建后父進(jìn)程會立即退出
Type=oneshot:一次性進(jìn)程,Systemd會等當(dāng)前服務(wù)退出,再繼續(xù)往下執(zhí)行
Type=dbus:當(dāng)前服務(wù)通過D-Bus啟動
Type=notify:當(dāng)前服務(wù)啟動完畢,會通知Systemd,再繼續(xù)往下執(zhí)行
Type=idle:若有其他任務(wù)執(zhí)行完畢,當(dāng)前服務(wù)才會運(yùn)行
ExecStart:啟動當(dāng)前服務(wù)的命令
ExecStartPre:啟動當(dāng)前服務(wù)之前執(zhí)行的命令
ExecStartPost:啟動當(dāng)前服務(wù)之后執(zhí)行的命令
ExecReload:重啟當(dāng)前服務(wù)時(shí)執(zhí)行的命令
ExecStop:停止當(dāng)前服務(wù)時(shí)執(zhí)行的命令
ExecStopPost:停止當(dāng)其服務(wù)之后執(zhí)行的命令
RestartSec:自動重啟當(dāng)前服務(wù)間隔的秒數(shù)
Restart:定義何種情況Systemd會自動重啟當(dāng)前服務(wù),可能的值包括always(總是重啟)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
TimeoutSec:定義Systemd停止當(dāng)前服務(wù)之前等待的秒數(shù)
Environment:指定環(huán)境變量
2.3      Install區(qū)塊
[Install]通常是配置文件的最后一個區(qū)塊,用來定義如何啟動,以及是否開機(jī)啟動。它的主要字段如下:
WantedBy:它的值是一個或多個Target,當(dāng)前Unit激活時(shí)(enable)符號鏈接會放入/etc/systemd/system目錄下面以Target名+.wants后綴構(gòu)成的子目錄中
RequiredBy:它的值是一個或多個Target,當(dāng)前Unit激活時(shí),符號鏈接會放入/etc/systemd/system目錄下面以Target 名 + .required后綴構(gòu)成的子目錄中
Alias:當(dāng)前Unit 可用于啟動的別名
Also:當(dāng)前Unit激活(enable)時(shí),會被同時(shí)激活的其他Unit
3. 服務(wù)監(jiān)控啟動3.1      socket 觸發(fā)的服務(wù)
涉及網(wǎng)絡(luò)的服務(wù),可以通過 socket 來觸發(fā)啟動。也就是說服務(wù)本身在沒連接業(yè)務(wù)時(shí)不用一直空跑著,可以讓systemd 幫忙監(jiān)聽一個 socket ,以減少資源消耗。當(dāng)真正有業(yè)務(wù)連接進(jìn)來時(shí),才喚醒目標(biāo)服務(wù)。要達(dá)成這樣的配置,目標(biāo)服務(wù)程序在實(shí)現(xiàn)上也有一定要求。
開發(fā)一個常規(guī)的網(wǎng)絡(luò)服務(wù),一般有以下幾個關(guān)鍵步驟:
1.創(chuàng)建一個 socket
2.調(diào)用 bind 將該 socket 綁定一個端口
3.調(diào)用 listen 監(jiān)聽端口,將該 socket 變成監(jiān)聽文件描敘符 fd
4.調(diào)用 accept 接收一個客戶端連接,得到一個新的連接文件描敘符 fd
5.讀寫連接 socket 的 fd,完成業(yè)務(wù)邏輯
借助 systemd 強(qiáng)大且通用的服務(wù)功能,它可以幫忙完成前兩步,并且將 socket 的 fd 傳給被激活的程序,后者就只要從第3步開始實(shí)現(xiàn)工作。
由socker觸發(fā)的服務(wù)對應(yīng)于 systemd 的配置文件要有兩個,后綴分別是.socket與.service ,除后綴外的文件名要相同,這樣就能自動關(guān)聯(lián),例如名為hello-world-socket的服務(wù):
hello-world-socket.socket
[Unit]Description=Hello World Socket​​[Socket]ListenStream=0.0.0.0:1234
hello-world-socket.service
[Unit]Description=Hello World Socket Service​​[Service]ExecStart=/absolute/path/to/hello-world-socket.exe
如上,.socket 的配置,需要有 [Socket] 段,ListenStream 字段表示了要監(jiān)聽 的地址與端口。相應(yīng)的 .service 配置,與之前例子一樣,描敘了如何啟動服務(wù)。因?yàn)檫@是想由 socket 激活的 service ,故沒有配置重啟字段。
在 systemctl 的大多數(shù)子命令中,如 start ,其參數(shù)默認(rèn)是假定 .service 單元 配置的。例如systemctl start hello-world-socket 等效于 systemctl start hello-world-socket.service 。但在這個例子中,有兩種同名單元配置, 且按要求先只啟動 hello-world-socket.socket ,所以要寫完整的單元名:
systemctl start hello-world-socket.socket3.2      定時(shí)器觸發(fā)的服務(wù)
對于定時(shí)器觸發(fā)的服務(wù)首先要配置一個 .timer 單元文件,例如:
hello-world.timer
[Unit]Description=The Hello-World Timer​[Timer]OnCalendar=*-*-* *:*:00
其中,OnCalendar 的配置格式同 crontab ,上例表示每分鐘觸發(fā)。
然后需要一個同名的 .service 單元文件。本文開頭編譯的 hello-world.exe 正好 可作為該定時(shí)器啟動的程序,例如:
hello-world.service
[Unit]Description=The Hello-World Timer​​[Service]Type=oneshotExecStart=/absolute/path/to/hello-world.exeStandardOutput=file:/absolute/path/to/stdout-file
然后啟動定時(shí)器,并查看狀態(tài):
systemctl start hello-world.timersystemctl status hello-world.timer4. 服務(wù)異常重運(yùn)行
為了確保服務(wù)在遭遇故障時(shí)能夠自動重啟。在Systemd的服務(wù)單元文件中,Restart指令是控制服務(wù)重啟行為的核心設(shè)置。本文章將探討Restart=on-failure與Restart=always這兩個選項(xiàng)的區(qū)別,幫助開發(fā)人員對系統(tǒng)服務(wù)做出更適合的選擇。Restart指令定義了當(dāng)服務(wù)停止時(shí)Systemd的行為。它可以精細(xì)控制服務(wù)在遇到不同退出情況時(shí)是否應(yīng)該重啟。這是確保關(guān)鍵服務(wù)可靠性的重要機(jī)制,尤其是在生產(chǎn)環(huán)境中,服務(wù)的持續(xù)運(yùn)行對業(yè)務(wù)至關(guān)重要
4.1           Restart=on-failure:智能重啟
當(dāng)服務(wù)單元文件中設(shè)置了Restart=on-failure時(shí),Systemd會在服務(wù)因錯誤退出時(shí)嘗試重啟服務(wù)。"錯誤退出"通常是指服務(wù)以非零狀態(tài)碼結(jié)束運(yùn)行,這可能是由于程序崩潰、遇到未處理的異常或其他非正常情況導(dǎo)致的。例如,如果你的服務(wù)由于內(nèi)存不足而崩潰,on-failure將確保服務(wù)嘗試重新啟動。但如果服務(wù)是由于正常的系統(tǒng)維護(hù)任務(wù)而被停止,或者開發(fā)人員故意停止服務(wù)進(jìn)行調(diào)試,那么它將不會被重啟。
其應(yīng)用場景如下:
生產(chǎn)環(huán)境:在不希望因?yàn)榫S護(hù)或更新操作而自動重啟服務(wù)的生產(chǎn)環(huán)境中使用。
故障排除:當(dāng)服務(wù)可能需要在出現(xiàn)問題時(shí)停止,以便進(jìn)行故障排除時(shí)。
有條件的重啟:當(dāng)你只想在服務(wù)因特定問題而停止時(shí)重啟。
4.2      Restart=always:無條件重啟
與on-failure相對的是Restart=always選項(xiàng)。不管服務(wù)是如何終止的,系統(tǒng)都會嘗試將其重啟。這意味著即使服務(wù)被管理員有意關(guān)閉,或者服務(wù)正常結(jié)束,Systemd也會立即嘗試將其重啟。
這種策略適用于那些必須始終運(yùn)行的服務(wù),無論它們是因?yàn)楹畏N原因停止的。這確保了即使在進(jìn)行系統(tǒng)更新或維護(hù)時(shí),服務(wù)也能盡可能快地恢復(fù)運(yùn)行。
其應(yīng)用場景如下:
關(guān)鍵服務(wù):對于那些系統(tǒng)的核心功能,如數(shù)據(jù)庫服務(wù)或Web服務(wù)器,這些服務(wù)的任何停機(jī)時(shí)間都是不可接受的。
高可用性要求:在需要最大程度減少服務(wù)停機(jī)時(shí)間的環(huán)境中。
簡化管理:在希望無論服務(wù)如何停止都能立即重啟的情況下。



本文地址:http://m.qingdxww.cn/thread-860776-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 偷偷鲁国内视频视频在线 | 免费观看黄视频 | 国产乱了真实在线观看 | 日韩在线亚洲 | 亚洲综合色网 | 日本特黄高清免费大片爽 | 男女www| 国产福利在线观看一区二区 | 一区二区不卡在线观看 | 95老司机免费福利 | 惩罚美女妲己的尤老师 | 99爱在线精品视频免费观看9 | 一级毛片视频在线 | 91精品视频在线免费观看 | 狠久久| 99re2| 特级毛片免费视频观看 | 亚洲一区二区视频 | 91精品网站 | 成年男女免费视频网站 | 国产吧在线视频 | 91av爱爱| 天堂网在线.www天堂在线 | 91精品国产麻豆国产自产在线 | 男女啪啪抽搐一进一出免费看 | 日韩欧美一区二区三区中文精品 | 欧美xxxxx性喷潮 | 欧美日韩一区二区三区在线 | 黄 色 免 费 网站在线观看 | www.蜜臀| 亚洲h视频在线观看 | 午夜资源在线 | 动漫免费网站 | 在线欧洲成人免费视频 | 日本在线视频一区二区三区 | 国产午夜精品久久久久小说 | 久久国产精品超级碰碰热 | 一级毛毛片毛片毛片毛片在线看 | 一区二区精品在线观看 | 欧美高清不卡视频 | 99久热国产精品视频尤物不卡 |