av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

linux 系統(tǒng)進程管理工具systemd詳解(systemctl命令、創(chuàng)建自己的systemd服務(wù))

瀏覽:188日期:2023-03-07 14:40:41
目錄
  • linux systemd
    • 什么是 systemd
      • systemd 特點
      • unit(單元)
      • systemd unit目錄
      • Unit 和 Target
      • Unit 文件結(jié)構(gòu)
  • Linux命令——systemctl
    • 參考

      linux systemd

      什么是 systemd

      Linux 系統(tǒng)在啟動過程中,內(nèi)核完成初始化以后,由內(nèi)核第一個啟動的程序便是 init 程序,路徑為 /sbin/init(為一個軟連接,鏈接到真實的 init 進程),其 PID 為1,它為系統(tǒng)里所有進程的“祖先”,Linux 中所有的進程都由 init 進程直接或間接進行創(chuàng)建并運行,init 進程以守護進程的方式存在,負責(zé)組織與運行系統(tǒng)的相關(guān)初始化工作,讓系統(tǒng)進入定義好的運行模式,如命令行模式或圖形界面模式。

      Systemd(系統(tǒng)管理守護進程),最開始以GNU GPL協(xié)議授權(quán)開發(fā),現(xiàn)在已轉(zhuǎn)為使用GNU LGPL協(xié)議,它是如今討論最熱烈的引導(dǎo)和服務(wù)管理程序。如果你的Linux系統(tǒng)配置為使用Systemd引導(dǎo)程序,它取替?zhèn)鹘y(tǒng)的SysV init,啟動過程將交給systemd處理。Systemd的一個核心功能是它同時支持SysV init的后開機啟動腳本。

      systemd是目前Linux系統(tǒng)上主要的系統(tǒng)守護進程管理工具,由于init一方面對于進程的管理是串行化的,容易出現(xiàn)阻塞情況,另一方面init也僅僅是執(zhí)行啟動腳本,并不能對服務(wù)本身進行更多的管理。所以從CentOS 7開始也由systemd取代了init作為默認的系統(tǒng)進程管理工具

      systemd 是內(nèi)核啟動后的第一個用戶進程,PID 為1,是所有其它用戶進程的父進程。

      systemd 特點

      • 最新系統(tǒng)都采用systemd管理(RedHat7,CentOS7,Ubuntu20.04…)
      • CentOS7 支持開機并行啟動服務(wù),顯著提高開機啟動效率
      • CentOS7關(guān)機只關(guān)閉正在運行的服務(wù),而CentOS6,全部都關(guān)閉一次。
      • CentOS7服務(wù)的啟動與停止不再使用腳本進行管理,也就是/etc/init.d下不在有腳本。
      • CentOS7使用systemd解決原有模式缺陷,比如原有service不會關(guān)閉程序產(chǎn)生的子進程

      unit(單元)

      系統(tǒng)初始化需要做的事情非常多。需要啟動后臺服務(wù),比如啟動 ssh 服務(wù);需要做配置工作,比如掛載文件系統(tǒng)。這個過程中的每一步都被 systemd 抽象為一個配置單元,即 unit。可以認為一個服務(wù)是一個配置單元,一個掛載點是一個配置單元,一個交換分區(qū)的配置是一個配置單元等等。

      下面是一些常見的 unit 類型:

      • service :代表一個后臺服務(wù)進程,比如 MySQLd。這是最常用的一類。
      • socket :此類配置單元封裝系統(tǒng)和互聯(lián)網(wǎng)中的一個套接字 。當下,systemd 支持流式、數(shù)據(jù)報和 連續(xù)包的 AF_INET、AF_INET6、AF_UNIX socket 。每一個套接字配置單元都有一個相應(yīng)的服務(wù)配置單元 。相應(yīng)的服務(wù)在第一個"連接"進入套接字時就會啟動(例如:nscd.socket 在有新連接后便啟動 nscd.service)。
      • device :此類配置單元封裝一個存在于 Linux 設(shè)備樹中的設(shè)備。每一個使用 udev 規(guī)則標記的設(shè)備都將會在 systemd 中作為一個設(shè)備配置單元出現(xiàn)。
      • mount :此類配置單元封裝文件系統(tǒng)結(jié)構(gòu)層次中的一個掛載點。Systemd 將對這個掛載點進行監(jiān)控和管理。比如可以在啟動時自動將其掛載;可以在某些條件下自動卸載。Systemd 會將 /etc/fstab 中的條目都轉(zhuǎn)換為掛載點,并在開機時處理。
      • automount :此類配置單元封裝系統(tǒng)結(jié)構(gòu)層次中的一個自掛載點。每一個自掛載配置單元對應(yīng)一個掛載配置單元 ,當該自動掛載點被訪問時,systemd 執(zhí)行掛載點中定義的掛載行為。
      • swap:和掛載配置單元類似,交換配置單元用來管理交換分區(qū)。用戶可以用交換配置單元來定義系統(tǒng)中的交換分區(qū),可以讓這些交換分區(qū)在啟動時被激活。
      • target :此類配置單元為其他配置單元進行邏輯分組。它們本身實際上并不做什么,只是引用其他配置單元而已。這樣便可以對配置單元做一個統(tǒng)一的控制。這樣就可以實現(xiàn)大家都已經(jīng)非常熟悉的運行級別概念。比如想讓系統(tǒng)進入圖形化模式,需要運行許多服務(wù)和配置命令,這些操作都由一個個的配置單元表示,將所有這些配置單元組合為一個目標(target),就表示需要將這些配置單元全部執(zhí)行一遍以便進入目標所代表的系統(tǒng)運行狀態(tài)。 (例如:multi-user.target 相當于在傳統(tǒng)使用 SysV 的系統(tǒng)中運行級別 5)
      • timer:定時器配置單元用來定時觸發(fā)用戶定義的操作,這類配置單元取代了 atd、crond 等傳統(tǒng)的定時服務(wù)。
      • snapshot :與 target 配置單元相似,快照是一組配置單元。它保存了系統(tǒng)當前的運行狀態(tài)。
      • path:文件系統(tǒng)中的一個文件或目錄。
      • scope:用于 cgroups,表示從 systemd 外部創(chuàng)建的進程。
      • slice:用于 cgroups,表示一組按層級排列的單位。slice 并不包含進程,但會組建一個層級,并將 scope 和 service 都放置其中。
        **每個配置單元都有一個對應(yīng)的配置文件,系統(tǒng)管理員的任務(wù)就是編寫和維護這些不同的配置文件,比如一個 MySQL 服務(wù)對應(yīng)一個 mysql.service 文件。**
      
      • .automount:用于控制自動掛載文件系統(tǒng),相當于 SysV-init 的 autofs 服務(wù)
      • .device:對于 /dev 目錄下的設(shè)備,主要用于定義設(shè)備之間的依賴關(guān)系
      • .mount:定義系統(tǒng)結(jié)構(gòu)層次中的一個掛載點,可以替代過去的 /etc/fstab 配置文件
      • .path:用于監(jiān)控指定目錄或文件的變化,并觸發(fā)其它 Unit 運行
      • .scope:這種 Unit 文件不是用戶創(chuàng)建的,而是 Systemd 運行時產(chǎn)生的,描述一些系統(tǒng)服務(wù)的分組信息
      • .service:封裝守護進程的啟動、停止、重啟和重載操作,是最常見的一種 Unit 文件
      • .slice:用于表示一個 CGroup 的樹,通常用戶不會自己創(chuàng)建這樣的 Unit 文件
      • .snapshot:用于表示一個由 systemctl snapshot 命令創(chuàng)建的 Systemd Units 運行狀態(tài)快照
      • .socket:監(jiān)控來自于系統(tǒng)或網(wǎng)絡(luò)的數(shù)據(jù)消息,用于實現(xiàn)基于數(shù)據(jù)自動觸發(fā)服務(wù)啟動
      • .swap:定義一個用戶做虛擬內(nèi)存的交換分區(qū)
      • .target:用于對 Unit 文件進行邏輯分組,引導(dǎo)其它 Unit 的執(zhí)行。它替代了 SysV-init 運行級別的作用,并提供更靈活的基于特定設(shè)備事件的啟動方式
      • .timer:用于配置在特定時間觸發(fā)的任務(wù),替代了 Crontab 的功能

      systemd unit目錄

      Unit 文件按照 Systemd 約定,應(yīng)該被放置指定的三個系統(tǒng)目錄之一中。這三個目錄是有優(yōu)先級的,如下所示,越靠上的優(yōu)先級越高。因此,在三個目錄中有同名文件的時候,只有優(yōu)先級最高的目錄里的那個文件會被使用。

      /etc/systemd/system:系統(tǒng)或用戶自定義的配置文件
      /run/systemd/system:軟件運行時生成的配置文件
      /usr/lib/systemd/system:系統(tǒng)或**第三方軟件安裝時添加的配置文件**。

      Systemd 默認從目錄 /etc/systemd/system/ 讀取配置文件。但是,里面存放的大部分文件都是符號鏈接,指向目錄 /usr/lib/systemd/system/,真正的配置文件存放在那個目錄。

      Unit 和 Target

      Target 就是一個 Unit 組,包含許多相關(guān)的 Unit 。

      Unit 是 Systemd 管理系統(tǒng)資源的基本單元,可以認為每個系統(tǒng)資源就是一個 Unit,并使用一個 Unit 文件定義。在 Unit 文件中需要包含相應(yīng)服務(wù)的描述、屬性以及需要運行的命令。

      Unit 文件結(jié)構(gòu)

      systemd.service 中文手冊
      參考URL:

      每一個服務(wù)以.service結(jié)尾,一般會分為3部分:[Unit]、[Service]和[Install]

      • [Unit]:記錄unit文件的通用信息。
      • [Service]:記錄Service的信息
      • [Install]:安裝信息。

      把自己的服務(wù)使用systemd管理需要書寫*.service文件,如服務(wù)名xxx.service,下面我們介紹一下*.service文件里面具體的內(nèi)容。
      進入目錄 cd /etc/systemd/system/

      cat << EOF > /etc/systemd/system/xxx.service
      [Unit]
      Description=Xxx Service
      Documentation=https://www.secureweb3.com/
      After=network-online.target
      Wants=network-online.target
      
      [Service]
      User=root
      CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
      AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
      NoNewPrivileges=true
      ExecStart=+$APPROOT/xxx
      Restart=on-failure
      RestartPreventExitStatus=23
      
      [Install]
      WantedBy=multi-user.target
      EOF
      
      
      • Description:描述這個 Unit 文件的信息
      • Documentation:指定服務(wù)的文檔,可以是一個或多個文檔的 URL 路徑
      • Requires:依賴的其它 Unit 列表,列在其中的 Unit 模板會在這個服務(wù)啟動時的同時被啟動。并且,如果其中任意一個服務(wù)啟動失敗,這個服務(wù)也會被終止
      • Wants:與 Requires 相似,但只是在被配置的這個 Unit 啟動時,觸發(fā)啟動列出的每個 Unit 模塊,而不去考慮這些模板啟動是否成功
      • After:與 Requires 相似,但是在后面列出的所有模塊全部啟動完成以后,才會啟動當前的服務(wù)
      • network-online.target是主動等待直到網(wǎng)絡(luò)“啟動”的target,其中“啟動”的定義

      network.target代表有網(wǎng)路,network-online.target代表一個連通著的網(wǎng)絡(luò)。

      [service]

      • User: 指定用戶運行CapabilityBoundingSet: 能力邊界設(shè)置,可以設(shè)置哪些能力
      • capability

      美: [?ke?p??b?l?ti]
      英: [.ke?p?’b?l?ti]
      n. 能力;才能;(國家的)軍事力量
      網(wǎng)絡(luò) 性能;容量;才干

      bound
      美: [ba?nd]
      英: [ba?nd]
      n. 邊界;跳躍;范圍;界限
      v. 跳躍;鄰接;“bind”的過去分詞和過去式;限制
      adj. 打算;要往(某處)去的;被束縛的;理應(yīng)…的
      網(wǎng)絡(luò) 彈跳;邊邊界框;彈跳力

      CAP_NET_ADMIN
      執(zhí)行各種與網(wǎng)絡(luò)相關(guān)的操作:
      * 接口配置;
      * 管理 IP 防火墻、偽裝和
      會計;
      * 修改路由表;
      *綁定到任何地址以進行透明代理;
      * 設(shè)置服務(wù)類型 (TOS);
      * 清除驅(qū)動程序統(tǒng)計信息;
      * 設(shè)置混雜模式;
      *啟用多播;
      * 使用setsockopt(2)設(shè)置以下套接字選項:
      SO_DEBUG、SO_MARK、SO_PRIORITY(對于優(yōu)先級外
      范圍 0 到 6)、SO_RCVBUFFORCE和SO_SNDBUFFORCE。

         CAP_NET_BIND_SERVICE
        將套接字綁定到 Internet 域特權(quán)端口(端口
        小于 1024 的數(shù)字)。
      • NoNewPrivileges=true
      • ExecStart: 定義啟動進程時執(zhí)行的命令
      • Restart= 設(shè)為on-failure, on-watchdog, on-abnormal, always 之一, 可以實現(xiàn)在失敗狀態(tài)下的自動重啟該服務(wù)。
      • RestartPreventExitStatus中列出的退出碼或者信號永遠不會導(dǎo)致該服務(wù)被重啟。

      [Install]

      • WantedBy字段:表示該服務(wù)所在的 Target。

      Target的含義是服務(wù)組,表示一組服務(wù)。WantedBy=multi-user.target指的是,sshd 所在的 Target 是multi-user.target。

      這個設(shè)置非常重要,因為執(zhí)行systemctl enable sshd.service命令時,sshd.service的一個符號鏈接,就會放在/etc/systemd/system目錄下面的multi-user.target.wants子目錄之中。

      一般來說,常用的 Target 有兩個:一個是multi-user.target,表示多用戶命令行狀態(tài);另一個是graphical.target,表示圖形用戶狀態(tài),它依賴于multi-user.target。

      Linux命令——systemctl

      Systemd 入門教程:實戰(zhàn)篇
      參考URL: https://www.jb51.net/article/269756.htm
      Linux命令——systemctl
      參考URL:https://www.jb51.net/article/269756.htm

      systemd對應(yīng)的進程管理命令就是systemctl。

      systemctl   [command]    [unit](配置的應(yīng)用名稱)
       
      command可選項· 
      start:啟動指定的unit systemctl start nginx
      stop:關(guān)閉指定的unit  systemctl stop nginx
      restart:重啟指定unit systemctl restart nginx
      reload:重載指定unit  systemctl reload nginx
      enable:系統(tǒng)開機時自動啟動指定unit,前提是配置文件中有相關(guān)配置 systemctl enable nginx
      disable:開機時不自動運行指定unit  systemctl disable nginx
      status:查看指定unit當前運行狀態(tài)   systemctl status nginx

      參考

      Systemd 入門教程:實戰(zhàn)篇
      參考URL: https://www.jb51.net/article/269756.htm

      到此這篇關(guān)于linux 系統(tǒng)進程管理工具systemd詳解(systemctl命令、創(chuàng)建自己的systemd服務(wù))的文章就介紹到這了,更多相關(guān)linux 進程管理工具systemd內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

      標簽: Linux Apache
      主站蜘蛛池模板: 国产精品99久久久久久久vr | 人人干天天干 | 很很干很很日 | 久久精品中文字幕 | 国产精品久久久久久久久久久免费看 | 国精产品一品二品国精在线观看 | 日韩av免费在线电影 | 欧美黄色性生活视频 | 天堂在线免费视频 | 91热爆在线观看 | 国产91久久久久蜜臀青青天草二 | 成人午夜免费视频 | 亚洲成人一区二区三区 | www4虎| 国产成人精品一区二区三区网站观看 | 日韩欧美在线不卡 | 国产免费一区二区 | 华丽的挑战在线观看 | 欧美日韩综合视频 | 亚洲热在线视频 | 久草视频观看 | 久久久久无码国产精品一区 | 国产成人精品一区二区三区 | 亚洲精品乱码久久久久久蜜桃 | 欧美久久一级特黄毛片 | 色综合久久久久 | 亚洲综合激情 | 久久久精品一区二区三区四季av | 日韩av电影在线观看 | 日韩av一区二区在线观看 | 久久婷婷av | 成人网av | 久久久亚洲一区 | 久久久国产一区二区三区四区小说 | 免费亚洲视频 | 一区二区免费 | 国产九九精品 | 看毛片的网站 | 秋霞影院一区二区 | 成人国产精品久久 | 亚洲综合天堂 |