如何使用 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。
确保该脚本是可执行的:

步骤 2:创建 Systemd 服务单元文件¶
在 /etc/systemd/system/ 目录下创建一个新的服务单元文件。通常这个文件的命名格式为 your-service-name.service。比如,这里创建一个名为 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 配置,以便它能识别新创建的服务。
步骤 4:启用并启动服务¶
启用服务后,systemd 会在每次系统启动时自动启动该服务。你可以使用以下命令启用服务:
启用服务后,可以手动启动服务,确保一切正常:

步骤 5:查看服务状态¶
你可以使用以下命令检查服务的状态,确保它正在运行:
如果服务运行正常,你将看到类似以下的输出:
● 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!

步骤 6:禁用和停止服务¶
如果你不再需要这个服务,可以通过以下命令禁用并停止它:
4. 进阶:调试和日志管理¶
如果自定义服务出现问题,systemd 提供了日志功能来帮助你调试问题。你可以通过 journalctl 命令查看服务的日志输出:
这将显示与 hywelsatr_service.service 相关的所有日志信息,帮助你排查问题。
5.总结¶
通过 systemctl 管理自定义启动服务,可以使你的脚本或程序在系统启动时自动运行,极大地提高了系统的自动化管理能力。通过创建服务单元文件,并根据需要调整 systemd 配置,你可以灵活地控制服务的启动、停止和日志管理。当然有朋友可能会问到,关于自启动还有很多更简单或者其他方式,的确,本章节也只对systemctl 这种来管理,并且system这种还有一些优化启动顺序工作和调试。