跟我學 systemd

http://netkiller.github.io/journal/os.systemd.html

Mr. Neo Chen (陳景峯), netkiller, BG7NYT


中國廣東省深圳市龍華新區民治街道溪山美地
518131
+86 13113668890


版權聲明

轉載請與作者聯繫,轉載時請務必標明文章原始出處和作者信息及本聲明。

文檔出處:
http://netkiller.github.io
http://netkiller.sourceforge.net

微信掃瞄二維碼進入 Netkiller 微信訂閲號

QQ群:128659835 請註明“讀者”

2017-06-16

摘要

目錄

1. 什麼是 systemd

systemd是Linux電腦操作系統之下的一套中央化系統及設置管理程序(init軟件),包括有守護進程、程式庫跟應用軟件,由Lennart Poettering帶頭開發。 其開發目標是提供更優秀的框架以表示系統服務間的依賴關係,並依此實現系統初始化時服務的並行啟動,同時達到降低Shell的系統開銷的效果,最終代替現在常用的System V與BSD風格init程序。

2. why-為什麼做

與多數發行版使用的System V風格init相比,systemd採用了以下新技術:

  1. 採用Socket激活式與D-Bus激活式服務,以提高相互依賴的各服務的並行運行性能;

  2. 用cgroups代替進程ID來追蹤進程,以此即使是兩次fork之後生成的守護進程也不會脫離systemd的控制。

3. systemd 是何時被採用的

CentOS 7 開始系統預設使用 systemd,對於用戶來說就是service被systemctl替代了。

4. 那些系統使用 systemd

基本上從 Redhat 派生出的Linux操作系統基本都切換到了 systemd,Ubuntu也採用了systemd

5. system 是誰開發的

由Lennart Poettering帶頭開發

6. 怎樣編寫systemd腳本

下面是一個啟動tomcat的systemd腳本,以此腳本為例我帶大家進入 systemd 的世界。

例 1. /usr/lib/systemd/system/tomcat.service
			
####################################################
# Homepage: http://netkiller.github.io
# Author: netkiller<netkiller@msn.com>
# Script: https://github.com/oscm/shell
# Date: 2015-11-03
####################################################

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
After=syslog.target

[Service]
Type=forking

User=www
Group=www

#EnvironmentFile=/etc/sysconfig/tomcat
ExecStartPre="rm -rf /srv/apache-tomcat/logs/*"
ExecStart=/srv/apache-tomcat/bin/startup.sh
#ExecStartPost=

ExecStop=/srv/apache-tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target
			
			

腳本安裝到 /usr/lib/systemd/system/tomcat.service 下面

systemctl enable tomcat
systemctl start tomcat
systemctl stop tomcat
systemctl disable tomcat
			

啟用腳本的時候會創建一個符號連結

[neo@netkiller ~]# ll /etc/systemd/system/multi-user.target.wants/tomcat.service 
lrwxrwxrwx 1 root root 38 Nov  3 04:06 /etc/systemd/system/multi-user.target.wants/tomcat.service -> /usr/lib/systemd/system/tomcat.service
			

6.1. Unit

Description 寫一段文字描述該腳本

After 等待網絡就緒後運行

6.2. Service

Type 啟動類型

User, Group 運行 ExecStart 腳本的用戶,相當於 su - user -c ExecStart

Environment 環境變數,EnvironmentFile 環境變數檔案

ExecStartPre 開始之前運行的腳本,ExecStart 啟動腳本, ExecStartPost 啟動之後運行的腳本

ExecStop 停止腳本

6.3. Install

WantedBy=multi-user.target 安裝到多用戶模式