淺談systemd原理和應用
多不說,直接上代碼(可謂配置):
[Unit] Description=demo app After=network-is-online.target [Service] Type=Simple ExecStart=/usr/bin/demo [Install] WantedBy=multi-user.target
:表達的意思是在network已經online情況下則啟動該服務,如果上述文件為/lib/systemd/system/下的demo_app.service,則啟動。
tips:
cd /lib/systemd/system systemctl is-enabled demo_app.service systemctl enable demo_app.service
1. systemd崛起
聊聊linux系統的應用啟動服務的機制:
sysinit -> upstart -> systemd
systemd 主要是針對sysinit「發熱而生」,所謂熱則是/etc/init.d/xxx.sh,運行一連串的shell,以串行的機制無休止running腳本,弊端頗多。
2. systemd基本過程
核心是通過套接字進行激活通訊的,簡單點則是套接字trigger一切/下一個服務,不存在依賴關係。
套接字用socket,表示為------>:
A. ------>B ------> D
\
\
------>C ------> E
T1 T2 T3
Ts = T3 - T1
對比串行則
A - > B T2-T1
A - > C T2-T1
B - > D T3-T2
C - > E T3-T2
Ti = 2(T3-T1) = 2 Ts
3. 應用更加廣泛,請看下eg
[Unit] Description=demo app After=network-on-line.target Before=mysql-running.target [Service] Type=Simple ExecStart=/usr/bin/demo [Install] WantedBy=multi-user.target
在network啟動後啟動demo,在mysql啟動前啟動demo,保證demo需要用到網絡,但是不需要等mysql(啟動完3s)才開始該服務。(純屬假定場景)
至於.target怎麼形成,下文繼續分解。


