目录
systemd
是一种现代化的初始化系统和服务管理器,广泛用于 Linux 操作系统中,尤其是在大多数基于 Debian 和 Red Hat 系统的发行版(如 Ubuntu、CentOS、Fedora)中。它是当前 Linux 系统的默认服务管理工具,提供了并行启动服务、依赖管理、进程监控等许多先进功能。下面是对 systemd
服务的详细解读。
1. systemd
基础概念
-
unit:
systemd
中的基本管理单元。每个 unit 描述了一个服务、设备、挂载点、套接字或其他系统资源。常见的 unit 类型有:- service:定义服务,如 Web 服务器。
- socket:管理网络套接字。
- target:用于将多个 unit 组织在一起形成系统启动目标。
- mount:挂载文件系统。
- timer:用于定时任务,类似于 cron。
-
service unit 文件:每个服务都有一个对应的 unit 文件,通常存放在
/etc/systemd/system/
或/lib/systemd/system/
目录下,文件扩展名通常是.service
。
2. 常见的 systemd
命令
-
启动服务:
sudo systemctl start <service_name>
启动指定的服务。
-
停止服务:
sudo systemctl stop <service_name>
停止指定的服务。
-
重启服务:
sudo systemctl restart <service_name>
-
查看服务状态:
sudo systemctl status <service_name>
查看服务的当前状态、是否运行、日志等。
-
启用服务开机启动:
sudo systemctl enable <service_name>
将服务设置为开机启动。
-
禁用服务开机启动:
sudo systemctl disable <service_name>
禁用服务的开机启动。
-
查看所有服务的状态:
sudo systemctl list-units --type=service
3. Service unit 文件格式
systemd
使用配置文件(unit 文件)来管理服务。下面是一个简单的 .service
文件示例:
[Unit]
Description=JWHB Service
After=network.target
[Service]
ExecStart=/usr/local/bin/jwhb
Restart=on-failure
User=nobody
Group=nogroup
WorkingDirectory=/usr/local/bin
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
3.1、[Unit] 部分
在 systemd
单元文件的 [Unit]
部分,你可以定义服务的基本描述、启动顺序和依赖关系。这个部分的配置项帮助定义服务之间的关系和服务的启动时机。
-
Description:服务的简短描述,便于用户识别服务的功能。
-
After:指定服务启动的顺序。表示当前服务必须在指定服务之后启动。可以用于确保服务按正确顺序启动。例如,确保 Web 服务在数据库服务之后启动:
-
Before:指定当前服务必须在指定服务之前启动。这可以用于强制服务按照特定顺序启动。例如,确保数据库服务在 Web 服务之前启动:
-
Requires:指定当前服务依赖的其他服务。如果依赖的服务失败,当前服务也会失败并停止。
-
Wants:指定当前服务期望启动的其他服务,即使这些服务失败也不会影响当前服务的启动。
-
Conflicts:定义当前服务和指定服务之间的冲突关系。如果一个服务启动,另一个服务将被停止。
-
Before/After:你可以根据需要组合
Before
和After
以建立服务间的启动顺序。例如,After=network.target
表示该服务会在网络服务启动后才会启动。
3.2、[Service] 部分
[Service]
部分用于定义如何启动和停止服务。它包含了服务的执行命令、重启策略、用户和工作目录等信息。
-
Ex