開發者學堂課程【Linux 系統管理進階第二課時:Systemd】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/789/detail/13754Systemd
内容簡介
一、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 配置檔案包含的三個單元
[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 : 在安裝這個服務時候還需要的其他服務
1.代碼講解
- Unit 部分
something 代表任何事物,任何内容,Wants 是服務啟動成功時檢查有遺漏啟動,After 是指網絡啟動成功後執行
- Service 部分
type 這個指令的執行完成,退出也認為服務是正常的,以及配置這個remainafterexit,表示即使建成退出也表示可以繼續運作,另外兩個就是兩個最核心的execstart 和execstop 表示在啟動的時候會執行touch,tmp 目錄。
- Install 部分
Wantby 表示服務挂載在multi-user.target