跳转至

如何使用 systemctl 添加自定义启动服务

1. 引言

在Linux系统中,systemd 是一种非常强大的初始化系统和服务管理器,它用于启动和管理系统服务。systemctl 是与 systemd 配合使用的命令行工具,可以用来启动、停止、重启和管理系统服务。本篇文章将介绍如何利用 systemctl 创建和管理自定义启动服务,以便在系统启动时自动执行自定义脚本或程序。

2. 什么是 systemd 和 systemctl?

2.1. systemd

systemd 是一个用于初始化和管理系统进程的工具,替代了传统的 SysV init 系统。它的优势在于能够管理服务的启动顺序、并行启动服务、按需启动以及对系统的更细粒度控制。

2.2. systemctl

systemctl 是与 systemd 配合使用的命令行工具,提供了控制和管理系统服务的功能。通过 systemctl,你可以轻松地启停服务、查看服务状态、重新加载配置等。

3. 如何添加自定义启动服务?

要将自定义脚本或程序添加为 systemd 管理的服务,并使其在系统启动时自动启动,可以按照以下步骤进行:

步骤 1:创建自定义脚本

首先,你需要有一个需要在启动时运行的脚本或程序。假设你有一个简单的 Bash 脚本 hywelstar_script.sh,它位于 /home/user/hywelstar_script.sh。

#!/bin/sh
echo "Hello, I am Hywelstar, This is a demo!"

确保该脚本是可执行的:

chmod +x /home/root/hywelstar_script.sh

image-20250107220534700

步骤 2:创建 Systemd 服务单元文件

在 /etc/systemd/system/ 目录下创建一个新的服务单元文件。通常这个文件的命名格式为 your-service-name.service。比如,这里创建一个名为 hywelstar_service.service 的文件。

sudo vi /etc/systemd/system/hywelstar_service.service

在文件中输入以下内容:

[Unit]
Description=Hywelstar Demo Service
After=network.target

[Service]
ExecStart=/home/root/hywelstar_script.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

解释:

  • [Unit] 部分:定义服务的基本描述和启动顺序。After=network.target 表示该服务会在网络启动后启动。
  • [Service] 部分:定义服务如何启动。ExecStart 指定启动命令或脚本,Restart=on-failure 表示如果服务失败,会自动重启。
  • [Install] 部分:定义服务在哪个运行级别下启动。multi-user.target 表示服务会在多用户模式下启动。

步骤 3:重新加载 systemd 配置

在创建完服务单元文件后,你需要重新加载 systemd 配置,以便它能识别新创建的服务。

sudo systemctl daemon-reload

步骤 4:启用并启动服务

启用服务后,systemd 会在每次系统启动时自动启动该服务。你可以使用以下命令启用服务:

sudo systemctl enable hywelstar_service.service

启用服务后,可以手动启动服务,确保一切正常:

sudo systemctl start hywelstar_service.service

image-20250107221038857

步骤 5:查看服务状态

你可以使用以下命令检查服务的状态,确保它正在运行:

sudo systemctl status hywelstar_service.service

如果服务运行正常,你将看到类似以下的输出:

● hywelstar_service.service - Hywelstar Demo Service
   Loaded: loaded (/etc/systemd/system/hywelstar_service.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Fri 2021-09-24 01:40:47 UTC; 1min 8s ago
  Process: 9820 ExecStart=/home/root/hywelstar_script.sh (code=exited, status=0/SUCCESS)
 Main PID: 9820 (code=exited, status=0/SUCCESS)

Sep 24 01:40:47 UserDevice systemd[1]: Started Hywelstar Demo Service.
Sep 24 01:40:47 UserDevice hywelstar_script.sh[9820]: Hello, I am Hywelstar, This is a demo!

image-20250107221149211

步骤 6:禁用和停止服务

如果你不再需要这个服务,可以通过以下命令禁用并停止它:

sudo systemctl stop hywelstar_service.service
sudo systemctl disable hywelstar_service.service

4. 进阶:调试和日志管理

如果自定义服务出现问题,systemd 提供了日志功能来帮助你调试问题。你可以通过 journalctl 命令查看服务的日志输出:

sudo journalctl -u hywelstar_service.service

这将显示与 hywelsatr_service.service 相关的所有日志信息,帮助你排查问题。

5.总结

通过 systemctl 管理自定义启动服务,可以使你的脚本或程序在系统启动时自动运行,极大地提高了系统的自动化管理能力。通过创建服务单元文件,并根据需要调整 systemd 配置,你可以灵活地控制服务的启动、停止和日志管理。当然有朋友可能会问到,关于自启动还有很多更简单或者其他方式,的确,本章节也只对systemctl 这种来管理,并且system这种还有一些优化启动顺序工作和调试。