Centos7 systemd

Centos7 systemd 基礎學習

系統開機啟動流程:

POST--> boot sequence --> bootloader --> kernel + initramfs(initrd)--> rootfs  --> /sbin/init
# 又想起了加載kernel時,kernel是在文件系統中,所以還是需要先掛載文件系統,所以還是需要驅動,掛載文件系統的驅動在哪里呢?

init:

centos 5: sysv init
centos 6: upstart
centos 7: systemd   向后不完全兼容sysv init,upstart

systemd新特性:

> 系統引導時,實現服務并行啟動
> 按需激活進程
> 系統狀態快照
> 基于依賴關系定義服務控制邏輯

核心概念: unit(單元)

> 配置文件進行標識和配置,文件中主要包含了系統服務,監聽socket,保存系統快照以及其他與init相關信息。
> 保存位置:(常用位置)
    > /usr/lib/systemd/system
    > /run/systemd/system
    > /etc/systemd/system

Unit類型:

> Service unit: 文件擴展名為.service 用于定義系統服務
> Target unit: 文件擴展名為.target,用于模擬實現“運行級別”,但并不完全是。
> Device unit: .device 用于定義內核識別的設備
> Mount unit: .mount,定義文件系統掛載點
> socket unit: .socket,用于標識進程間通信用的socket文件
> snapshot unit: .snapshot,管理系統快照
> Swap unit: .swap,用于標識swap設備
> Automount unit: .automount,文件系統的自動掛載點
> Path unit: .path,用于定義文件系統中的一個文件或目錄

關鍵特性:

基于socket的激活機制: socket與服務程序分離,當有進程需要訪問此socket才真正啟動
基于bus的激活機制
基于device的激活機制:類似插入u盤,需要激活mount服務來掛載設備
基于path的激活機制:監控文件路徑或目錄發生變化,立即激活某服務
系統快照:將unit當前狀態數據保存在持久設備中
向后兼容sysv init腳本

不兼容:

systemctl命令固定不變,不像sysv init腳本可以自由定義。
非由systemd啟動的服務,systemctl無法與之通信。
5分鐘超時時間。

在Centos 5,6當中運行,級別切換過程(運行級別2切換到運行級別3):將級別3的k服務全部kill掉,s服務全部start

管理系統服務命令幫助:

Centos 7 : service unit,能兼容早期的服務腳本
命令: systemctl COMMAND  NAME.service
Unit Commands:
  list-units [PATTERN...]         List loaded units    (列出系統已經load的unit,-a查看所有的unit ,-t service查看service類型)
  list-sockets [PATTERN...]       List loaded sockets ordered by address   (列出系統已經加載socket類型unit)
  list-timers [PATTERN...]        List loaded timers ordered by next elapse
  start NAME...                   Start (activate) one or more units   (啟動服務)
  stop NAME...                    Stop (deactivate) one or more units  (停止服務)
  reload NAME...                  Reload one or more units             (重載服務)
  restart NAME...                 Start or restart one or more units   (重啟服務)
  try-restart NAME...             Restart one or more units if active
  reload-or-restart NAME...       Reload one or more units if possible,
                                  otherwise start or restart
  reload-or-try-restart NAME...   Reload one or more units if possible,
                                  otherwise restart if active
  isolate NAME                    Start one unit and stop all others   (切換運行級別)
  kill NAME...                    Send signal to processes of a unit   (向某unit進程發送信號)
  is-active PATTERN...            Check whether units are active
  is-failed PATTERN...            Check whether units are failed
  status [PATTERN...|PID...]      Show runtime status of one or more units
  show [PATTERN...|JOB...]        Show properties of one or more
                                  units/jobs or the manager
  cat PATTERN...                  Show files and drop-ins of one or more units
  set-property NAME ASSIGNMENT... Sets one or more properties of a unit
  help PATTERN...|PID...          Show manual for one or more units
  reset-failed [PATTERN...]       Reset failed state for all, one, or more
                                  units
  list-dependencies [NAME]        Recursively show units which are required
                                  or wanted by this unit or by which this
                                  unit is required or wanted

Unit File Commands:
  list-unit-files [PATTERN...]    List installed unit files  (列出unit服務開機啟動狀態,-t service 僅查看service類型的服務)
  enable NAME...                  Enable one or more unit files  (開機啟動)
  disable NAME...                 Disable one or more unit files  (禁止開機啟動)
  reenable NAME...                Reenable one or more unit files
  preset NAME...                  Enable/disable one or more unit files
                                  based on preset configuration
  preset-all                      Enable/disable all unit files based on
                                  preset configuration
  is-enabled NAME...              Check whether unit files are enabled  (查看服務是否開機自啟動)
  mask NAME...                    Mask one or more units
  unmask NAME...                  Unmask one or more units
  link PATH...                    Link one or more units files into
                                  the search path
  add-wants TARGET NAME...        Add 'Wants' dependency for the target
                                  on specified one or more units
  add-requires TARGET NAME...     Add 'Requires' dependency for the target
                                  on specified one or more units
  edit NAME...                    Edit one or more unit files
  get-default                     Get the name of the default target   (查看默認允許級別)
  set-default NAME                Set the default target    (設置默認運行級別)

Machine Commands:
  list-machines [PATTERN...]      List local containers and host

Job Commands:
  list-jobs [PATTERN...]          List jobs
  cancel [JOB...]                 Cancel all, one, or more jobs

Snapshot Commands:
  snapshot [NAME]                 Create a snapshot    (創建unit快照)
  delete NAME...                  Remove one or more snapshots    (刪除unit快照)

Environment Commands:
  show-environment                Dump environment            (查看運行環境,如語言,搜索路徑)
  set-environment NAME=VALUE...   Set one or more environment variables
  unset-environment NAME...       Unset one or more environment variables
  import-environment [NAME...]    Import all or some environment variables

Manager Lifecycle Commands:
  daemon-reload                   Reload systemd manager configuration
  daemon-reexec                   Reexecute systemd manager

System Commands:
  is-system-running               Check whether system is fully running
  default                         Enter system default mode            
  rescue                          Enter system rescue mode             (緊急救援模式)
  emergency                       Enter system emergency mode          (emergency模式,比rescue模式更徹底)
  halt                            Shut down and halt the system        (關機)
  poweroff                        Shut down and power-off the system   (關機)
  reboot [ARG]                    Shut down and reboot the system      (重啟)
  kexec                           Shut down and reboot the system with kexec
  exit                            Request user instance exit
  switch-root ROOT [INIT]         Change to a different root file system   (切換根文件系統)
  suspend                         Suspend the system     (掛起系統)
  hibernate                       Hibernate the system  (保存系統快照)
  hybrid-sleep                    Hibernate and suspend the system    (保存系統快照并掛起)

運行級別:

runlevel0.target -> poweroff.target
runlevel1.target -> rescue.target
runlevel2.target -> multi-user.target
runlevel3.target -> multi-user.target
runlevel4.target -> multi-user.target
runlevel5.target -> graphical.target
runlevel6.target -> reboot.target

運行級別切換:systemctl isolate graphical.target
不能使用runlevel切換運行級別,可以使用runlevel查看

切換至緊急求援模式:

systemctl rescue

切換至emergency模式:

systemctl emergency

設置服務開機自啟動:

systemctl enbale nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
# 只是在/etc/systemd/system/multi-user.target.wants/目錄下做了一個軟鏈接
# 禁止開機自啟動也只是將此目錄下的服務名稱軟鏈接刪除

類似的還有設置默認運行級別:

# systemctl set-default graphical.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target.

思考:這樣的設計思想與git在分支管理,版本管理上是否有異曲同工之妙?

內容按需快照一份,設計一個head指針,將指針指向我們需要的內容位置即可,高效,靈活,易理解。
我們人的記憶不也類似這樣的一個工作方式,將記憶碎片重現。

unit編寫:

[Unit]
Description=The nginx HTTP and reverse proxy server        描述
After=network.target remote-fs.target nss-lookup.target    服務先后次序與依賴關系

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid    start前,先刪除是否有pid文件
ExecStartPre=/usr/sbin/nginx -t      start前,先測試配置文件準確性
ExecStart=/usr/sbin/nginx      啟動nginx  
ExecReload=/bin/kill -s HUP $MAINPID   重啟,即是向nginx進程發送HUP信號
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target     多用戶模式啟動

# unit 單元文件編寫:
# https://www.freedesktop.org/software/systemd/man/systemd.unit.html、
# http://blog.csdn.net/yuesichiu/article/details/51331136#t0
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容