天天看點

Systemd | 學習筆記

開發者學堂課程【Linux 系統管理進階第二課時:Systemd】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址:

https://developer.aliyun.com/learning/course/789/detail/13754

Systemd

内容簡介

一、Systemd 的定義

二、Systemd 的常用指令

三、檢視已有的Systemd 配置檔案

四、編寫一個簡單的Systemd 配置檔案

Systemd 服務是一種以.service 結尾的單元(unit)配置檔案,用于控制由Systemd 控制或監視的程序。簡單說,用于背景以守護精靈

(daemon)的形式運作程式

Systemd 廣泛應用于新版本的RHELSUSE Linux EnterpriseCentOSFedora 和openSUSE 中,用于替代舊有的服務管理器service.

systemctl command xxx.service

#其中command 可以是start、stop、restart、enable 等,比如:

systemctl start httpd.service#

啟動Apache 服務

systemctl stop httpd.service#

停止Apache 服務

systemctl restart httpd.service#

停止Apache 服務

systemctl enable mariadb.service#

将MariaDB 服務設為開機啟動

三、檢視系統已有的Systemd 配置檔案

Systemd 的配置檔案都放置在/etc/systemd/system/目錄下

Systemd | 學習筆記

典型常用的systemd 配置檔案包含的三個單元

[Unit]#這個項目與此unit 的解釋、執行服務相依性有關

Description=OpenBSD Secure Shell server

Documentat ion=man:sshd(8) man:sshd_ config(5)After=network. target auditd. service ConditionPathExists=!/etc/ssh/sshd_ not_ to_ be_ run   [Service] #

這個項目與實際執行的指令參數有關EnvironmentFile=- -/etc/default/ssh ExecStartPre=/usr/sbin/sshd -t ExecStart=/usr/sbin/sshd -D $SSHD_ OPTSExecReload=/us r/sbin/sshd-tExecReload=/bin/kill -HUP $MAINPIDKillMode=process Restart=on-failure RestartPreventExitStatus=255 Typе =notify Runt imeDirectory=sshd RuntimeDirectoryMode=0755    [Install] #込個項目説明此unit要挂載啣個target下面WantedBy=multi -user. target Alias=sshd. Service

Systemd 的Unit 在Systemd 中,所有引導過程中Systemd 要控制的東西都是-個單元。基本的用法如下:

  • Description :代表整個單元的描述,可根據需要任意填寫。
  • Wants :本單元啟動了,它“想要"的單元也會被啟動。但是這個單元若啟動不成功,對本單元沒有影響。
  • Requires:這個單元啟動了,那麼它“需要"的單元也會被啟動;它“需要”的單元被停止了,但是,這個設定并不能控制啟動順序,因為它“需要”的單元啟動也需要時間,若它“需要”的單元啟動還未完成,就開始啟動本單元,則本單元也無法啟動,是以不建議使用這個字段。
  • OnFailure:若本單元啟動失敗了↓那麼啟動這個單元作為折衷。
  • Before/After :指定啟動順序。

Systemd 的Service 服務本體,基本的用法如下:

  • Type :服務的類型,各種類型的差別如下所示simple :預設,這是最簡單的服務類型。意思就是說啟動的程式就是主體程式,這個程式要是退出那麼一切皆休.
  • forking :标準Unix Daemon 使用的啟動方式。

啟動程式後會調用fork0函數,把必要的通信頻道都設定好之後父程序退出,留下守護精靈的子程序。

  • oneshot :适用于那些被- -次性執行的任務或者指令,它運作完成後便了無痕迹。因為這類服務運作完就沒有任何痕迹,我們經常會需要使用RemainAfterExit=yes.即使沒有程序存在, Systemd 也認為該服務啟動成功了。

同時隻有這種類型支援多條指令,指令之間用;分割,如需換行可以用\。

  • dbus :這個程式啟動時需要擷取-塊DBus空間,是以需要和BusName= -起用。隻有它成功獲得了DBus 空間,依賴它的程式才會被啟動。
  • ExecStart :在輸入的指令是start 時候執行的指令,這裡的指令啟動的程式必須使用絕對路徑,比如你必須用/sbin/arp而不能簡單的以環境變量直接使用arp.
  • ExecStop :在輸入的指令是stop時候執行的指令, 要求同上。ExecReload :這個不是必需,如果不寫則service 就不支援restart 指令。ExecStart 和ExecStop 是必須要有的。

Systemd 的Install

服務編寫完之後還需要被systemd 裝載,定義安裝單元各個字段如下:

  • WantedBy :設定服務被誰裝載,一般設定為multi-user.target
  • Alias :為service 設定-個别名 ,可以使用多個名字來操作服務。
  • Also :  在安裝這個服務時候還需要的其他服務

Systemd | 學習筆記

1.代碼講解

Systemd | 學習筆記
  • Unit 部分

something 代表任何事物,任何内容,Wants 是服務啟動成功時檢查有遺漏啟動,After 是指網絡啟動成功後執行

  • Service 部分

type 這個指令的執行完成,退出也認為服務是正常的,以及配置這個remainafterexit,表示即使建成退出也表示可以繼續運作,另外兩個就是兩個最核心的execstart 和execstop 表示在啟動的時候會執行touch,tmp 目錄。

  • Install 部分

Wantby 表示服務挂載在multi-user.target