Systemd 与 Systemd 服务文件详解及实战
创作时间:
作者:
@小白创作中心
Systemd 与 Systemd 服务文件详解及实战
引用
CSDN
1.
https://m.blog.csdn.net/Interview_TC/article/details/143365849
systemd是现代Linux系统中的系统和服务管理器,用于取代传统的init系统,具备启动速度快、依赖管理灵活等优势。本文将对systemd的结构和服务文件进行详细讲解,并结合实战实例帮助更好地理解和掌握systemd。
Systemd 背景与特点
systemd由Lennart Poettering和Kay Sievers于2010年开发,旨在解决传统System V init和Upstart系统的局限性。自发布以来,systemd已成为Fedora、Debian、Ubuntu等多种Linux发行版的默认初始化系统。
systemd的主要特点包括:
- 并行启动:systemd通过依赖关系和按需加载优化启动速度,使服务可在指定顺序并行启动。
- 精细的依赖管理:支持按需定义服务的硬依赖和软依赖,确保服务按正确顺序启动或停止。
- 事件触发启动:通过socket、device、timer等机制可以按需求启动服务。
- 单元化管理:将系统组件抽象为单元(unit),包括服务、挂载点、套接字等,便于集中管理。
- 内置日志管理(journald):systemd包含journald日志守护进程,可收集和记录所有服务日志,方便诊断和分析。
Systemd 服务文件概述
Systemd服务文件用于定义服务的启动、停止、依赖等属性,每个服务文件对应一个单元(unit),通常以.service结尾。systemd会根据服务文件中的配置管理该服务的生命周期。
- 服务文件目录结构:
- /etc/systemd/system/:用户自定义的服务文件存放目录,优先级最高,适用于自定义配置。
- /lib/systemd/system/:系统默认的服务文件存放目录,通常由系统软件包提供。
- /run/systemd/system/:动态生成的服务文件存放目录,通常用于临时会话或自动生成的配置。
在加载服务文件时,systemd会按照/etc、/run、/lib的顺序查找服务文件,保证用户配置的优先级。
- 服务文件结构:
一个典型的systemd服务文件包含[Unit]、[Service]和[Install]三个部分:
- [Unit]:定义服务的描述和依赖关系。
- Description:简要描述服务的用途。
- After:指定服务在其他服务启动后再启动。
- Requires和Wants:定义服务的依赖关系,Requires表示硬依赖,Wants表示软依赖。
- [Service]:描述服务的实际行为、启动方式及重启策略。
- ExecStart:启动服务时执行的命令。
- ExecStop:停止服务时执行的命令。
- Restart:定义服务的重启策略(如always表示服务异常停止时自动重启)。
- Type:指定服务启动的类型(simple、forking、oneshot等)。
- [Install]:指定服务的安装行为,常用于设置服务在系统启动时的目标。
- WantedBy:定义服务在特定目标(如multi-user.target)下启动。
Systemd 服务文件的关键配置项
- ExecStart和ExecStop
- ExecStart定义了服务启动时运行的命令,通常包含完整的执行路径和必要参数。
- ExecStop定义了停止服务时的执行命令,用于进行服务的清理操作。
- Type
- simple:默认类型,ExecStart命令启动后即认为服务已启动。
- forking:服务通过fork子进程运行,父进程退出。
- oneshot:适用于一次性任务,执行完ExecStart后即停止。
- notify:服务完成初始化后发送通知给systemd。
- Restart
- always:服务异常停止后自动重启。
- on-failure:仅在服务非正常退出时重启。
- no:服务不自动重启。
- WantedBy
- 通常用于[Install]部分,指定服务关联的目标单元。例如multi-user.target表示服务将随多用户模式启动。
Systemd 服务文件实例及解释
下面通过实例讲解如何创建和配置systemd服务文件。
实例 1:创建简单的服务文件
假设我们有一个应用程序myapp,并希望将其设置为系统服务,使其在系统启动时自动运行。
- 创建/etc/systemd/system/myapp.service文件,内容如下:
[Unit]
Description=My Application Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/myapp
Restart=always
User=myappuser
Group=myappgroup
[Install]
WantedBy=multi-user.target
- 配置解释:
- [Unit]部分:
- Description描述服务用途。
- After=network.target指定myapp在网络启动后运行。
- [Service]部分:
- ExecStart定义服务启动命令。
- Restart=always保证服务异常停止时会自动重启。
- User和Group指定服务运行的用户和组。
- [Install]部分:
- WantedBy=multi-user.target使服务在多用户模式下自动运行。
- 启用并启动服务:
systemctl enable myapp.service
systemctl start myapp.service
- 检查服务状态:
systemctl status myapp.service
实例 2:创建定时任务服务
使用systemd可以实现定时任务功能,替代cron。以下配置会每分钟执行一次指定任务。
- 创建/etc/systemd/system/mytimer.timer文件:
[Unit]
Description=Run my application every minute
[Timer]
OnCalendar=*-*-* *:*:00
Persistent=true
[Install]
WantedBy=timers.target
- 创建/etc/systemd/system/mytimer.service文件,指定任务:
[Unit]
Description=My Timer Service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mytask.sh
- 启用并启动定时器:
systemctl enable mytimer.timer
systemctl start mytimer.timer
此配置将在每分钟的开始时运行/usr/local/bin/mytask.sh脚本,Persistent=true确保即使系统关机,定时器也能在恢复后立即补执行错过的任务。
实例 3:监控服务自动重启
创建一个服务,配置为在服务失败时自动重启,并记录每次重启时间。
- 创建/etc/systemd/system/reliable.service文件:
[Unit]
Description=Reliable Application Service
After=network.target
[Service]
ExecStart=/usr/local/bin/reliable_app
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
- 配置说明:
- Restart=on-failure确保服务在发生错误时自动重启。
- RestartSec=5设置重启等待时间为5秒。
- StandardOutput和StandardError将服务的标准输出和错误重定向到systemd日志中,方便日志查看。
- 启用并启动服务:
systemctl enable reliable.service
systemctl start reliable.service
- 使用journalctl -u reliable.service查看服务日志,包括重启记录。
Systemd 服务文件管理与操作建议
- 优先使用/etc/systemd/system/目录:将自定义的服务文件放置在/etc/systemd/system/目录下,以防系统更新覆盖自定义配置。
- 修改服务后使用daemon-reload:每次编辑或添加新的服务文件后,需要运行systemctl daemon-reload命令重新加载systemd配置,使更改生效。
- 检查服务日志:通过journalctl -u <service-name>查看服务的日志输出,便于排查和解决问题。
- 合理设置重启策略:对于关键服务,可以将Restart配置为always或on-failure,确保服务在意外停止后自动重启。
- 正确配置依赖关系:利用[Unit]部分的After、Requires和Wants等选项,定义服务之间的依赖关系,以避免启动顺序混乱。
热门推荐
智能灌溉助力加州应对地下水危机,农业生产效率提升20%
脂肪肝患者的苹果养生法:每天一个苹果,远离脂肪肝困扰
云太医教你调理上热下寒体质
替米沙坦正确使用指南:稳住血压不求人
麝香保心丸:冠心病患者的福音?
杨家城景区主题活动:重现杨家将风采,传承忠勇文化
家庭食育:让孩子吃得更健康,活得更精彩
浙江车主晒22万换电池账单,专家:质保期内无需担忧
东兴壮族村寨:体验最纯正的壮族文化
宝顶山、北山石刻两日游:自驾探访千年艺术殿堂
重庆南山徒步攻略:4条精选路线,带你玩转春秋两季
肖战助力赵露思新剧,《珠帘玉幕》成优酷最快破万剧集
窦靖童窦佳嫄姐妹同框跳舞,潮酷装扮尽显姐妹情
想运动又怕伤膝盖?这3种运动很“友好”
揭秘AI画图黑科技:卷积神经网络如何让机器学会创作?
AI绘画挑战传统艺术:从《太空歌剧院》到《Edmond de Belamy》
AI绘画技术:艺术创作的未来?
肖战为赵露思新剧发声,友情支持还是商业互捧?
广州公安:提升新质战斗力 构筑高水平安全
1979年中越战争:中国28天歼敌5.7万,越南经济倒退20年
1979年中越战争:万炮轰山28天攻陷谅山
刀郎复出演唱会火爆,背后感情故事曝光
刀郎:用音乐诉说真实,以爱情守护梦想
链条保养有讲究:教你识别最佳上油时机
广州白云山天心制药:替米沙坦与硝苯地平控释片联合用药指南
负债逾期?三招教你轻松应对
负债后心态调整,雨伞下的郁金香来帮忙
信用卡债务爆表?这些理财技巧救你命!
“先敬罗衣后敬人”是什么意思?如何理解这句谚语?
独居必备:五分钟学会酸辣开胃凉拌土豆片