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
下一篇 2016-09-21

相關推薦

  • 日志SYSLOGD_OPTIONS 參數

    SYSLOGD_OPTIONS 參數

    Linux干貨 2018-03-26
  • 網絡班21期第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。          mkdir /home/tuser1        &n…

    Linux干貨 2016-08-22
  • 馬哥教育21期網絡班—第六周課程+練習—-成長進行時

    請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; [root@localhost ~]# cp /etc/rc.d/rc.sysinit /tmp/rc.sysinit&nbs…

    Linux干貨 2016-08-03
  • N25-第5周博客作業

    N25-第5周博客作業 1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; grep -E "^[[:space:]]+[[:alnum:]]+" /boot/grub/grub.conf    grep "^[[:space:]]…

    Linux干貨 2016-12-31
  • SElinux管理

                                                      &nbsp…

    系統運維 2016-09-26
  • grep命令與正則表達式的應用示例、find命令應用示例

    grep命令與正則表達式的應用示例、find命令應用示例 顯示當前系統上root、fedora或user1用戶的默認shell。 使用擴展正則表達式,它支持使用A|B表示或者之意。查看用戶的默認shell,cat /etc/passwd文件,根據用戶名所處位置進行錨定,其最后一個字段即表示該用戶的默認shell。實現方式及結果如下:   找出/et…

    Linux干貨 2016-11-28
欧美性久久久久