Systemd學習介紹

2021-08-13 15:13:58 字數 2523 閱讀 2903

1. systemd是什麼?

systemd是一種新的linux系統服務管理器。(d => daemon)

它替換了init系統,能夠管理系統啟動過程和一些系統服務,一旦啟動起來,就將監管整個系統。

傳統的init程序啟動方式的兩大弊端:

一是啟動時間長。(序列啟動)

二是啟動指令碼複雜。

systemd:

並行啟動服務,

按需啟動守護程序,

自動化服務依賴關係

2. systemd幹啥的?

啟動守護程序

在systemd管理體系中,被管理的deamon(守護程序)稱作unit(單元)

單元主要包括:

service, target, mount, sockets, path, timer

3. systemd的使用

systemctl是 systemd 的主命令,用於管理系統。

# 列出正在執行的 unit

$ systemctl list-units

# 顯示系統狀態

$ systemctl status

# 顯示單個 unit 的狀態

$ sysystemctl status bluetooth.service

# 立即啟動乙個服務

$ sudo systemctl start apache.service

# 立即停止乙個服務

$ sudo systemctl stop apache.service

# 重啟乙個服務

$ sudo systemctl restart apache.service

# 殺死乙個服務的所有子程序

$ sudo systemctl kill apache.service

$ sudo systemctl reload apache.service

systemd 預設從目錄/etc/systemd/system/讀取配置檔案。

但是,裡面存放的大部分檔案都是符號鏈結,指向目錄/usr/lib/systemd/system/,

真正的配置檔案存放在那個目錄。

systemctl enable命令用於在上面兩個目錄之間,建立符號鏈結關係。

單元配置檔案格式:

[unit]

description=atd daemon

[service]

type=forking

execstart=/usr/bin/atd

[install]

wantedby=multi-user.target

[unit]區塊通常是配置檔案的第乙個區塊,用來定義 unit 的元資料,以及配置與其他 unit 的關係。

description:簡短描述

requires:當前 unit 依賴的其他 unit,如果它們沒有執行,當前 unit 會啟動失敗

wants:與當前 unit 配合的其他 unit,如果它們沒有執行,當前 unit 不會啟動失敗

bindsto:與requires類似,它指定的 unit 如果退出,會導致當前 unit 停止執行

before:如果該欄位指定的 unit 也要啟動,那麼必須在當前 unit 之後啟動

after:如果該欄位指定的 unit 也要啟動,那麼必須在當前 unit 之前啟動

conflicts:這裡指定的 unit 不能與當前 unit 同時執行

[service]區塊用來 service 的配置,只有 service 型別的 unit 才有這個區塊。它的主要字段如下。

type:定義啟動時的程序行為。

type=******:預設值,執行execstart指定的命令,啟動主程序

type=forking:以 fork 方式從父程序建立子程序,建立後父程序會立即退出

type=oneshot:一次性程序,systemd 會等當前服務退出,再繼續往下執行

type=notify:當前服務啟動完畢,會通知systemd,再繼續往下執行

execstart:啟動當前服務的命令

execstartpre:啟動當前服務之前執行的命令

execstartpost:啟動當前服務之後執行的命令

execreload:重啟當前服務時執行的命令

execstop:停止當前服務時執行的命令

execstoppost:停止當其服務之後執行的命令

restartsec:自動重啟當前服務間隔的秒數

restart:定義何種情況 systemd 會自動重啟當前服務,可能的值包括always(總是重啟)、on-success、on-failure、on-abnormal、on-abort、on-watchdog

timeoutsec:定義 systemd 停止當前服務之前等待的秒數

[install]區塊,定義如何安裝這個配置檔案,即怎樣做到開機啟動。

wantedby欄位:表示該服務所在的 target。(啟動某個target的時候,該target下面的所有服務會被啟動)

(預設的啟動 target 是multi-user.target, 在這個組裡的所有服務,都將開機啟動)

使用Systemd包裝SpringBoot應用

為應用建立乙個service檔案 unit description springboot rest service service user ubuntu 要執行程式的路徑 呼叫jar檔案的shell執行檔案 succes itstatus 143 timeoutstopsec 10 restart...

systemd服務內容詳解

systemd服務內容詳解 systemd是linux下的一種init軟體,由lennart poettering帶頭開發,並在lgpl 2.1及其後續版本許可證下開源發布。其開發目標是提供更優秀的框架以表示系統服務間的依賴關係,並依此實現系統初始化時服務的並行啟動,同時達到降低shell的系統開銷...

centos7 系統管理systemd學習記錄

在centos7之前,系統服務是service,chkconfig等命令來管理的。到了centos7,統一使用systemctl來管理系統服務 其實就是把chkconfig和service結合在一起了,chkconfig主要用來控制開機自啟動,service則是用來管理服務的開啟關閉的 servic...