systemd

1、systemd

(1)CentOS 7 使用systemd替換了SysV。Systemd目的是要取代一直在使用的init系統,兼容SysV和LSB的啟動腳本,負責在系統啟動或運行時,激活系統資源、服務器進程和其它進程。

(2)systemd的新特性:

系統引導是實現服務并行啟動
按需啟動守護進程
自動化管理各服務間的依賴關系
同時采用sockets式與D-Bus總線式激活服務
系統狀態快照與系統恢復

2、unit

(1)systemd引進了unit區塊,記錄啟動順序與依賴關系。unit表示不同類型的systemd對象,通過配置文件進行表示和配置;文件中主要包含了系統服務、監聽sockets、保存的系統快照已經其它與init相關的信息。這些配置文件主要保存在以下目錄中:

/usr/lib/systemd/system/目錄:此目錄保存的是各個服務最主要的啟動腳本設置文件,類似于centos7之前的/etc/init.d/目錄。
/run/systemd/system/目錄:系統執行過程中所產生的服務腳本,優先于上面目錄運行。
/etc/systemd/system/目錄:管理員建立的執行腳本,類似于/etc/rc.d/rcN.d/S* (N:0-6)的功能,比上面的目錄優先運行(最優先)。

(2)unit的常見類型:(systemctl -t help 命令查看unit類型)

systemd

service:文件擴展名為.service,用于定義系統服務
target:文件擴展名為.target,用于模擬實現“運行級別”
snapshot:文件擴展名為.snapshot,用于管理系統快照
device:文件擴展名為.device,用于定義內核識別的設備
mount:文件擴展名為.mount,用于定義文件系統掛載點
automount:文件擴展名為.automunt,用于定義文件系統的自動掛載點
swap:文件擴展名為.swap,用于標識swap設備
path:文件擴展名為.path,用于定義文件系統中的一個文件或目錄使用,常用于當文件系統變化時,延遲激活服務,如:spool目錄
    [root@localhost system]# ls /var/spool
    abrt  abrt-upload  anacron  at  cron  cups  lpd  mail  plymouth  postfix

(3)unit關鍵特性:

基于socket 的激活機制:socket 與服務程序分離
基于d-bus 的激活機制:
基于device 的激活機制:
基于path 的激活機制:
系統快照:保存各unit 的當前狀態信息于持久存儲設備中
向后兼容sysv init 腳本
    不兼容:
    systemctl 命令固定不變,不可擴展
    非由systemd 啟動的服務,systemctl無法與之通信

3、systemctl命令用法

systemctl - Control the systemd system and service manager
systemctl [OPTIONS...] COMMAND [NAME...]

注意:以下name.service表示某個具體服務

啟動:

systemctl start name.service

停止:

systemctl stop name.service

重啟:

systemctl restart name.service

查看狀態:

systemctl status name.service

條件式重啟:已啟動才重啟,否則不做操作:

systemctl try-restart name.service

重載或重新啟動服務:先加載,再啟動:

systemctl reload-or-restart name.service

重載或條件式重啟服務:

systemctl reload-or-try-restart name.service

禁止自動和手動啟動服務:

systemctl mask name.service

取消禁止:

systemctl unmask name.service

查看某服務當前激活與否的狀態:

systemctl is-active name.service

查看所有已經激活的服務:

systemctl list-units --type(-t) service

查看所有的服務(包括激活和未激活):

systemctl list-units --type service -all(-a)

loaded:Unit 配置文件已處理
active(running): 一次或多次持續處理的運行
active(exited): 成功完成一次性的配置
active(waiting): 運行中,等待一個事件
inactive: 不運行
enabled: 開機啟動
disabled: 開機不啟動
static: 開機不啟動,但可被另一個啟用的服務激活

設定某服務開機啟動:

systemctl enable name.service (相當于chkconfig name on)

設定某服務開機禁止啟動:

systemctl disable name.service(相當于chkconfig name off)

查看所有服務的開機自啟狀態:

systemctl list-unit-files --type service(相當于chkconfig --list)

列出該服務在哪些運行級別下啟用和禁用:

ls /etc/systemd/system/*.wants/name.service(列出的為啟用)

systemd

查看服務是否開機自啟:

systemctl is-enabled name.service

查看服務的依賴關系:

systemctl list-dependencies name.service

殺掉進程:

systemctl kill 進程號(名)

4、其他常用命令

切換至緊急救援模式:

systemctl rescue

切換至emergency 模式:

systemctl emergency

其它常用命令:

傳統命令init ,poweroff ,halt ,reboot 都成為systemctl 的軟鏈接
關機:systemctl halt 、systemctl poweroff
重啟:systemctl reboot
掛起:systemctl suspend
休眠: :systemctl hibernate
休眠并掛起:systemctl hybrid-sleep

5、target units:運行級別

相關配置文件:.target

ls /usr/lib/systemd/system/*.target:列出所有target unit。
systemctl list-unit-files --type target --all:顯示所有target服務

(1)運行級別:

0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.target, multi-user.target
3 ==> runlevel3.target, multi-user.target
4 ==> runlevel4.target, multi-user.target
5 ==> runlevel5.target, graphical.target
6 ==> runlevel6.target, reboot.target

(2)查看某級別的依賴性:

systemctl list-dependencies name.target

systemd

(3)級別切換:

systemctl isolate name.target

systemd

注意:只有/lib/systemd/system/name.target 文件中AllowIsolate=yes 才能切換(修改文件需執行systemctl daemon-reload 才能生效)

systemd

(4)查看默認運行級別:

systemctl get-default

systemd

(5)修改默認級別:

systemctl set-default name.target (實質是創建了個指向/usr/lib/systemd/system/目錄的軟連接)

systemd

systemd

6、service unit文件格式

/etc/systemd/system/:系統管理員和用戶使用 
/usr/lib/systemd/system/:發行版打包者使用

我們先看看service unit的文件內容,以httpd.service為例。

[root@localhost system]# cat httpd.service 
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

說明:

以“#”開頭的行后面的內容表示注釋
相關布爾值,1 、yes 、on 、true  都是開啟,0 、no 、off、false  都是關閉。
時間單位默認是秒,所以要用毫秒(ms)分鐘(m)等請顯示說明

service unit file通常由三部分組成:

[Unit]:定義與unit類型無關的通用選項,用于描述unit類型的描述信息、unit行為及依賴關系等
[Service]:與特定類型相關的專用選項;此處為service類型
[Install]:定義由“systemctl enable”已經“systemctl disable”命令在實現服務啟用、禁用時用到的一些選項

Unit段的常用選項:

Description:描述信息
After:定義unit的啟動次序,表示當前unit應該晚于那些unit啟動,其功能與Before相反
Requires:依賴到的其它units,強依賴,被依賴的units無法激活是,當前的unit也無法激活
wants:依賴到的其它units,弱依賴
Conflicts:定義units間的沖突關系

Service段的常用選項:

Type:定義影響ExecStart及相關參數的功能的unit進程啟動類型
    simple :默認值,這個daemon 主要由ExecStart 接的指令串來啟動,啟動后常駐于內存中
    forking :由ExecStart 啟動的程序透過spawns 延伸出其他子程序來作為此daemon 的主要服務。原生父程序在啟動結束后就會終止
    oneshot :與simple 類似,不過這個程序在工作完畢后就結束了,不會常駐在內存中
    dbus :與simple 類似,但這個daemon 必須要在取得一個D-Bus的名稱后,才會繼續運作. 因此通常也要同時設定BusNname= 才行
    notify :在啟動完成后會發送一個通知消息。還需要配合NotifyAccess 讓來讓 Systemd 接收消息
    idle :與simple 類似,要執行這個daemon 必須要所有的工作都順利執行完畢后才會執行。這類的daemon 通常是開機到最后才執行即可的服務
EnvironmentFile :環境配置文件
ExecStart :指明啟動unit 要運行命令或腳本的絕對路徑
ExecStartPre:ExecStart 前運行
ExecStartPost:ExecStart 后運行
ExecStop :指明停止unit 要運行的命令或腳本
Restart :當設定Restart=1 時,則當次daemon 服務意外終止后,會再次自動啟動此服務

Install段的常用選項:

Alias :別名,可使用systemctl command Alias.service
RequiredBy :被哪些units 所依賴,強依賴
WantedBy :被哪些units 所依賴,弱依賴
Also :安裝本服務的時候還要安裝別的相關服務

注意:對于新創建的unit 文件,或者修改了的unit 文件,要通知systemd 重載此配置文件,可用命令: systemctl daemon-reload

7、示例:創建一個備份服務

(1)創建一個腳本,用于被創建的服務調用

[root@localhost system]# cat /testdir/bak.sh 
#!/bin/bash
# 備份/etc/目錄
tar -Jcvf /testdir/etc-`date +%F`.tar.xz /etc/ &> dev/null

(2)給bak.sh腳本添加執行權限

[root@localhost system]# chmod u+x /testdir/bak.sh

(3)創建bak.service服務

[root@localhost system]# pwd
/etc/systemd/system (創建服務的文件存放位置)
[root@localhost system]# cat bak.service 
[Unit]
Description=backup my etc
Requires=atd.service
[Service]
Type=simple
ExecStart=/bin/bash -c "echo /testdir/bak.sh|at now"
#使用/bin/bash命令來執行bak.sh腳本,因此第2步可以省略
[Install]
WantedBy=multi-user.target

(4)啟用服務

[root@localhost system]# systemctl daemon-reload
[root@localhost system]# systemctl start bak.service

(5)驗證

systemd

原創文章,作者:pao,如若轉載,請注明出處:http://www.www58058.com/48172

(2)
paopao
上一篇 2016-09-21 08:59
下一篇 2016-09-21 09:48

相關推薦

  • DHCP使用幫助

    bootp 想要通過tcp/ip模型進行網絡通信需要有一個ip地址,IP地址是屬于操作系統的,所以沒有操作系統就沒有ip 為了解決這種問題,有一種網卡可以不需要操作系統就能獲取到ip bootp:只有第一次是動態獲得,以后ip地址就是和mac地址綁定的,不能分配給其他主機 DHCP:DHCP是bootp的改進版,主要引入了租約的定義 DHCP也可以根據mac…

    Linux干貨 2016-11-11
  • 變量、腳本、條件測試

    一、編程基礎   程序:指令+數據  計算機:運行二進制指令 程序編程風格:  過程式:以指令為中心,數據服務于指令  對象式:以數據為中心,指令服務于數據shell程序:提供了編程能力,解釋執行編程語言:  編譯:高級語言–>編譯器–>目標代碼  解釋:高級語言…

    Linux干貨 2016-08-15
  • 馬哥linux0803作業內容

    1. 創建sysadmins組 將用戶user1,user2,user3加入sysadmins組中 將user3設置為sysadmins的管理員 用user3登錄,將user2從組中移除 設置sysadmins的密碼centos 設置user1 在創建新文件時,文件的所屬組為sysadmins 刪除user1…3 刪除sysadmins 2、三種權限rwx對…

    Linux干貨 2016-08-04
  • 正則表達式

    什么是正則表達式? 正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為”元字符”)。正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串,許多程序設計語言都支持利用正則表達式進行字符串操作。正則表達式是煩瑣的,但它是強大的,學會之后的應用會讓你除…

    Linux干貨 2017-06-01
  • DNS轉發、ACL以及VIEW

    DNS全稱是Domain Name System的簡稱,即域名系統。因特網上作為域名和IP地址相互映射的一個分布式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協議運行在UDP/TCP協議之上,使用端口號53。 DNS轉發、ACL以及VIEW…

    Linux干貨 2016-12-08
  • 用戶和組的管理

    前言 服務器最主要的工作是提供可靠的服務,提供服務就必須對外開放自己的網絡,可靠就需要一定的機制來保證了。Linux中有一個3A的機制,首先是認證,就是我們經常聽到的一句話,怎么證明你就是你;其次是授權,管理一個服務器,每個管理員都有自己的職責,那么我們就只分配對應的權限給特定的人,這樣就可以明確事故的責任,從源頭甩鍋;最后是審計,總有一些黑客可以通過各種手…

    Linux干貨 2016-10-22
欧美性久久久久