2

浅谈systemd原理和应用 - real-watson

 2 years ago
source link: https://www.cnblogs.com/real-watson/p/16062120.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

浅谈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怎么形成,下文继续分解。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK