服务管理器

返回主页

一、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)可能如下:

  1. [Unit]
  2. Description=Redis In-Memory Data Store
  3. After=network.target
  4. [Service]
  5. User=root
  6. Group=root
  7. Type=forking
  8. ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
  9. ExecStop=/usr/local/bin/redis-cli shutdown
  10. TimeoutStopSec=30
  11. Restart=always
  12. StandardOutput=null
  13. StandardError=journal
  14. [Install]
  15. WantedBy=multi-user.target

三、systemd 配置文件介绍

1、[Unit] 部分描述了单元的元数据,如描述和服务启动的依赖条件

  1. # 该文件服务的简短描述,便于管理员快速了解文件作用
  2. Description
  3. # 提供文档或帮助链接。
  4. Documentation
  5. # 定义单元启动的相对顺序。
  6. # After:表示此单元应在其后指定单元启动之后启动
  7. # Before:与After相反
  8. After,Before
  9. # 表示依赖关系。
  10. # Requires:指出此单元依赖于其他单元,并且如果那些单元失败,此单元也会被停用
  11. # Wants:表示推荐启动,但不是强制的
  12. Requires,Wants

2、[Service] 部分定义了服务的行为,如启动命令、重启策略等

  1. # 定义服务的启动类型,如:simple、forking、oneshot、notify、idle
  2. Type
  3. simple:这是最常用的类型,也是默认值,该进程不会进行 fork 操作
  4. forking:服务启动时会先 fork 出一个子进程,然后父进程退出,而子进程继续作为服务运行。
  5. oneshot:服务只需要执行一次命令并退出
  6. notify:适用于那些能够主动向 Systemd 发送“就绪”通知的服务。
  7. idle:类似于 Type=oneshot,但 Systemd 会延迟执行,直到所有 job 队列中的任务完成。适合不紧急且不需要与其他服务争抢资源的启动任务。
  8. # 启动服务时执行的命令行。
  9. ExecStart
  10. # 停止服务时执行的命令行。
  11. ExecStop
  12. # 定义服务失败后是否以及如何重启,如:no、on-failure、always
  13. Restart
  14. no:不自动重启服务
  15. on-failure:当服务非正常退出时,Systemd 会重启服务
  16. always:无论服务以何种方式终止,Systemd 都会重启服务
  17. # 以指定用户和组权限运行服务。
  18. User,Group
  19. # 用于定义 Systemd 在发送停止信号给服务后等待服务自行优雅终止的时间限制。
  20. TimeoutStopSec
  21. # 指定了服务进程的标准(错误)输出应该被重定向到哪里
  22. StandardOutputStandardError
  23. journal:默认值,表示输出会被发送到 Systemd 的日志系统 journald
  24. null:输出被丢弃
  25. console:输出被发送到系统的控制台
  26. inherit:继承自父进程的输出处理方式
  27. tty:输出被发送到一个伪终端
  28. # 服务的工作目录。
  29. WorkingDirectory
  30. # 设置环境变量。
  31. Environment

3、[Install] 部分指定了该服务应该在哪个目标下启用

  1. # 指定在哪个目标下启用此单元,通常用于开机启动配置。如 `multi-user.target` 表示多用户非图形界面模式。
  2. WantedBy
  3. # 为单元提供别名
  4. Alias

四、systemctl 命令语法

systemctl 是与 systemd 交互的主要命令行工具。以下是一些常用的操作命令:

1、启动服务

  1. systemctl start myapp.service

2、停止服务

  1. systemctl stop myapp.service

3、重启服务

  1. systemctl restart myapp.service

4、启用服务(开机自启)

  1. systemctl enable myapp.service

5、禁用服务(取消开机自启)

  1. systemctl disable myapp.service

6、查看服务状态

  1. systemctl status myapp.service

7、查看所有活动单元

  1. systemctl list-units

8、查看日志

  1. journalctl -u myapp.service

这些命令和单元文件的编写规则构成了使用和管理 systemd 的基础语法。

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


暂无评论

暂无评论