多不说,直接上代码(可谓配置):
1 2 3 4 5 6 7 8 9 10 | [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:
1 2 3 | 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基本过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 核心是通过套接字进行激活通讯的,简单点则是套接字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
1 2 3 4 5 6 7 8 9 10 11 12 | [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怎么形成,下文继续分解。
Life is mess, don't let mess mess us.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了