日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Systemd 介紹與日常使用

 imnobody2001 2022-05-17 發(fā)布于黑龍江

Systemd

Systemd(system daemon)實(shí)現(xiàn)系統(tǒng)服務(wù)間的依賴關(guān)系,并依此實(shí)現(xiàn)系統(tǒng)初始化時(shí)服務(wù)的并行啟動(dòng),同時(shí)達(dá)到降低Shell的系統(tǒng)開銷,最終替代init。

Systemd采用了一下新技術(shù):

  • 采用Socket激活式與總線激活式服務(wù),以提高相互依賴的各服務(wù)的并行運(yùn)行性能。

  • 采用Cgroups替代PID來追蹤進(jìn)程,即使是兩次fork之后生成的守護(hù)進(jìn)程也不會(huì)脫離systemd的控制。

Systemd Unit

學(xué)習(xí)Systemd的第一步,就是搞懂 Unit(單元)是什么?

Unit就是Systemd的最小 功能/管理 單位,是單個(gè)進(jìn)程的描述。一個(gè)個(gè)小的Unit相互調(diào)用和依賴,組成一個(gè)龐大的任務(wù)管理系統(tǒng),這就是Systemd的基本思想。

由于Systemd要做到事情太多,導(dǎo)致Unit有很多種不同的類型:

  • Service Unit - 用于定義系統(tǒng)服務(wù)

  • Target Unit - 用于模擬實(shí)現(xiàn)“運(yùn)行級別”

  • Socket Unit - 用于Systemd監(jiān)聽Socket,在有連接的時(shí)候再啟動(dòng)。

  • Device Unit - 用于定義內(nèi)核識(shí)別的設(shè)備

  • Mount Unit - 用于定義文件系統(tǒng)掛載

  • Snapshot Unit - 用于管理系統(tǒng)快照

  • Swap Unit - 用于標(biāo)識(shí)swap設(shè)備

  • Automount Unit - 用于文件系統(tǒng)自動(dòng)掛載

  • Path Unit - 用于定義文件系統(tǒng)中的文件或目錄

所有的Unit文件都存放在 /usr/lib/systemd/system和/etc/systemd/system

Service Unit

  • 用于定義為系統(tǒng)服務(wù)。

  • 通常由三部分組成,[Unit] [Service] [Install],各部分釋義:

復(fù)制代碼
[Unit] 段的常用選項(xiàng):
   Description:描述信息; 意義性描述;
   After:定義unit的啟動(dòng)次序,表示當(dāng)前unit應(yīng)該晚于哪些unit啟動(dòng);其功能與Before相反;
   Requies:依賴到的其它units;強(qiáng)依賴,被依賴的units無法激活時(shí),當(dāng)前unit即無法激活;
   Wants:依賴到的其它units;弱依賴;
   Conflicts:定義units間的沖突關(guān)系
[Service] 段的常用選項(xiàng):
   Type:用于定義影響ExecStart及相關(guān)參數(shù)的功能的unit進(jìn)程啟動(dòng)類型,其類型有:
      simple:默認(rèn)值,執(zhí)行ExecStart指定的命令,啟動(dòng)主進(jìn)程
      forking:以 fork 方式從父進(jìn)程創(chuàng)建子進(jìn)程,創(chuàng)建后父進(jìn)程會(huì)立即退出
      oneshot:一次性進(jìn)程,Systemd 會(huì)等當(dāng)前服務(wù)退出,再繼續(xù)往下執(zhí)行
      dbus:當(dāng)前服務(wù)通過D-Bus啟動(dòng)
      notify:當(dāng)前服務(wù)啟動(dòng)完畢,會(huì)通知systemd再繼續(xù)往下執(zhí)行
      idle:若有其他任務(wù)執(zhí)行完畢,當(dāng)前服務(wù)才會(huì)運(yùn)行
   EnvironmentFile:環(huán)境配置文件;
   ExecStart:指明啟動(dòng)unit要運(yùn)行命令或腳本; 
   ExecStartPre:在ExecStart之前運(yùn)行;
     ExecStartPost:在ExecStart之后運(yùn)行;
     ExecReload: 指明重新加載配置的命令或腳本; #示例 ExecReload=/bin/kill -HUP $MAINPID
   ExecStop:指明停止unit要運(yùn)行的命令或腳本;  
   Restart:當(dāng)設(shè)定Restart=1時(shí),則當(dāng)次daemon服務(wù)意外終止后,會(huì)再次自動(dòng)啟動(dòng)。
   
[Install] 段的常用選項(xiàng):
   Alias:別名,可使用systemctl command Alias.service;
   RequiredBy:被哪些units所依賴;
   WantedBy:被哪些units所依賴
   
注意:對于新建或修改unit文件,需要通過命令 systemctl daemon-reload 重新加載。
復(fù)制代碼

Timer Unit

  • 定時(shí)器,可以定時(shí)調(diào)用其他Unit。

  • Service Unit只是定義了如何執(zhí)行任務(wù),還必須通過Timer Unit定義執(zhí)行時(shí)間,示例:

復(fù)制代碼
**定義Timer調(diào)用的my-timer.service **[Unit]
Description = MyTimer

[Service]
ExecStart = /bin/echo '...Hello MyTimer...'**定義調(diào)用Service的my-timer.timer**[Unit]
Description = Runs mytimer every minutes

[Timer]
OnUnitActiveSec = 1m
Unit = mytimer.service

[Install]WantedBy = multi-user.target        



# [Timer] 字段

  OnActiveSec:定時(shí)器生效后,多少時(shí)間開始執(zhí)行任務(wù)
  OnBootSec:系統(tǒng)啟動(dòng)后,多少時(shí)間開始執(zhí)行任務(wù)
  OnStartupSec:Systemd 進(jìn)程啟動(dòng)后,多少時(shí)間開始執(zhí)行任務(wù)
  OnUnitActiveSec:該單元上次執(zhí)行后,等多少時(shí)間再次執(zhí)行
  OnUnitInactiveSec: 定時(shí)器上次關(guān)閉后多少時(shí)間,再次執(zhí)行
  OnCalendar:基于絕對時(shí)間,而不是相對時(shí)間執(zhí)行
  AccuracySec:如果因?yàn)楦鞣N原因,任務(wù)必須推遲執(zhí)行,推遲的最大秒數(shù),默認(rèn)是60秒
  Unit:真正要執(zhí)行的任務(wù),默認(rèn)是同名的帶有.service后綴的單元
  Persistent:如果設(shè)置了該字段,即使定時(shí)器到時(shí)沒有啟動(dòng),也會(huì)自動(dòng)執(zhí)行相應(yīng)的單元
  WakeSystem:如果系統(tǒng)休眠,是否自動(dòng)喚醒系統(tǒng)

復(fù)制代碼

Socket Unit

  • 以 '.socket' 為后綴的單元文件, 封裝了一個(gè)用于進(jìn)程間通信的套接字(socket)或管道(FIFO), 以支持基于套接字的啟動(dòng)。

  • 讓Systemd監(jiān)聽Socket,在有連接的時(shí)候再啟動(dòng)該Unit,需要同名的Service。

  • 可以查看系統(tǒng)自帶的sshd.socket示例。

Target Unit

  • Target是指一組相關(guān)進(jìn)程,有點(diǎn)像init進(jìn)程模式下面的啟動(dòng)級別。

  • 當(dāng)WantedBy設(shè)置為指定target時(shí),執(zhí)行systemctl enable/disable [UnitName]時(shí),會(huì)自動(dòng)創(chuàng)建軟連接到/usr/lib/systemd/system下對應(yīng)的target.wants目錄中

  • 可以通過 systemctl get-default 查看當(dāng)前運(yùn)行級別。

  • Target 與 傳統(tǒng) RunLevel 的對應(yīng)關(guān)系如下:

    • Runlevel 0 == poweroff.target

    • Runlevel 1 == rescue.target

    • Runlevel 2 == multi-user.target

    • Runlevel 3 == multi-user.target

    • Runlevel 4 == multi-user.target

    • Runlevel 5 == graphical.target

    • Runlevel 6 == reboot.target

Systemd Command

復(fù)制代碼
# 查看單元狀態(tài)
## active (running): 進(jìn)程持續(xù)的運(yùn)行中
## active (exited): 進(jìn)程成功完成一次執(zhí)行
## active (waiting): 進(jìn)程等待中
## inactive:  未運(yùn)行
$ systemctl status [UnitName]

# 查看是否已啟用該單元
## enable、disable或static
## static是指對應(yīng)的Unit文件中沒有定義[Install]區(qū)域,因此無法配置為開機(jī)啟動(dòng)服務(wù)。
$ systemctl is-enabled [UnitName]

# 開機(jī)自動(dòng)執(zhí)行該單元
$ systemctl enable [UnitName]

# 關(guān)閉開機(jī)自動(dòng)執(zhí)行
$ systemctl disable [UnitName]

# 啟動(dòng)單元
$ systemctl start [UnitName]

# 關(guān)閉單元
$ systemctl stop [UnitName]

# 重啟單元
$ systemctl restart [UnitName]

# 重新加載服務(wù)配置,而不中斷服務(wù)
$ systemctl reload [UnitName]   # 類似于 nginx -s reload

# 殺死單元進(jìn)程
$ systemctl kill [UnitName]

# 禁止服務(wù),無法啟動(dòng)或開機(jī)啟動(dòng)
$ systemctl mask [UnitName]

# List units that systemd currently has in memory.     
$ systemctl list-units

# List unit files installed on the system, in combination with their enablement state (as reported by is-enabled).
$ systemctl list-unit-files

# Shows units required and wanted by the specified unit.
$ systemctl list-dependencies
復(fù)制代碼

Systemd 架構(gòu)圖

Systemd官網(wǎng)翻譯:

   http://www./systemd/systemd.index.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多