一、systemd 服务管理器概述
systemd
是一种在 Linux 操作系统中广泛使用的初始化系统和服务管理器。它作为系统中的第一个进程(PID 1)运行,负责启动和管理系统的各项服务和其他基础组件。其服务类型有很多种,我在这里只介绍最常用的.service
类型。
总体而言,systemd 通过现代化的设计和高级功能,提高了 Linux 系统的启动速度、运行效率和管理便利性。
二、单元文件简介
systemd
单元文件是 systemd 初始化系统中的核心组件,用于描述和控制各种系统资源和服务的配置与行为。systemd 单元文件通常位于 /etc/systemd/system/ 或 /usr/lib/systemd/system/ 目录下,并且文件以 .service 为后缀。
/usr/lib/systemd/system/:此目录存放由操作系统包安装的服务单元文件,这些是默认的、全局的配置,不建议直接修改这里的服务单元文件。(如果你想对这些服务进行自定义,可以在
/etc/systemd/system/
下创建一个同名的文件或链接到该文件,并进行必要的修改。)/etc/systemd/system/:这个目录存放本地管理员创建或修改的服务单元文件,这些文件会覆盖默认设置并允许自定义服务行为。当你想为特定系统定制服务或增加新的服务时,通常会把服务单元文件放在这里。
1、systemd 文件样例
一个简单的服务单元文件示例(假设为 redis.service
)可能如下:
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=root
Group=root
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
TimeoutStopSec=30
Restart=always
StandardOutput=null
StandardError=journal
[Install]
WantedBy=multi-user.target
三、systemd 配置文件介绍
1、[Unit] 部分描述了单元的元数据,如描述和服务启动的依赖条件
# 该文件服务的简短描述,便于管理员快速了解文件作用
Description
# 提供文档或帮助链接。
Documentation
# 定义单元启动的相对顺序。
# After:表示此单元应在其后指定单元启动之后启动
# Before:与After相反
After,Before
# 表示依赖关系。
# Requires:指出此单元依赖于其他单元,并且如果那些单元失败,此单元也会被停用
# Wants:表示推荐启动,但不是强制的
Requires,Wants
2、[Service] 部分定义了服务的行为,如启动命令、重启策略等
# 定义服务的启动类型,如:simple、forking、oneshot、notify、idle
Type
simple:这是最常用的类型,也是默认值,该进程不会进行 fork 操作
forking:服务启动时会先 fork 出一个子进程,然后父进程退出,而子进程继续作为服务运行。
oneshot:服务只需要执行一次命令并退出
notify:适用于那些能够主动向 Systemd 发送“就绪”通知的服务。
idle:类似于 Type=oneshot,但 Systemd 会延迟执行,直到所有 job 队列中的任务完成。适合不紧急且不需要与其他服务争抢资源的启动任务。
# 启动服务时执行的命令行。
ExecStart
# 停止服务时执行的命令行。
ExecStop
# 定义服务失败后是否以及如何重启,如:no、on-failure、always
Restart
no:不自动重启服务
on-failure:当服务非正常退出时,Systemd 会重启服务
always:无论服务以何种方式终止,Systemd 都会重启服务
# 以指定用户和组权限运行服务。
User,Group
# 用于定义 Systemd 在发送停止信号给服务后等待服务自行优雅终止的时间限制。
TimeoutStopSec
# 指定了服务进程的标准(错误)输出应该被重定向到哪里
StandardOutput、StandardError
journal:默认值,表示输出会被发送到 Systemd 的日志系统 journald 中
null:输出被丢弃
console:输出被发送到系统的控制台
inherit:继承自父进程的输出处理方式
tty:输出被发送到一个伪终端
# 服务的工作目录。
WorkingDirectory
# 设置环境变量。
Environment
3、[Install] 部分指定了该服务应该在哪个目标下启用
# 指定在哪个目标下启用此单元,通常用于开机启动配置。如 `multi-user.target` 表示多用户非图形界面模式。
WantedBy
# 为单元提供别名
Alias
四、systemctl 命令语法
systemctl
是与 systemd 交互的主要命令行工具。以下是一些常用的操作命令:
1、启动服务
systemctl start myapp.service
2、停止服务
systemctl stop myapp.service
3、重启服务
systemctl restart myapp.service
4、启用服务(开机自启)
systemctl enable myapp.service
5、禁用服务(取消开机自启)
systemctl disable myapp.service
6、查看服务状态
systemctl status myapp.service
7、查看所有活动单元
systemctl list-units
8、查看日志
journalctl -u myapp.service
这些命令和单元文件的编写规则构成了使用和管理 systemd 的基础语法。
1
暂无评论