服务管理器

返回主页

一、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 的基础语法。

展开/折叠菜单
89 预览数量 2024-05-23 17:25:24 发布 时间
目录
1 赞数量
评论数量
返回顶部
暂无评论

暂无评论