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

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

1. 引言

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

2. 什么是 systemdsystemctl

2.1. systemd

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

2.2. systemctl

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

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

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

步骤 1:创建自定义脚本

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

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

确保该脚本是可执行的:

1
chmod +x /home/root/hywelstar_script.sh

图片

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

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

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

在文件中输入以下内容:

1
2
3
4
5
6
7
8
9
10
[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 配置,以便它能识别新创建的服务。

1
sudo systemctl daemon-reload

步骤 4:启用并启动服务

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

1
sudo systemctl enable hywelstar_service.service

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

1
sudo systemctl start hywelstar_service.service

图片

步骤 5:查看服务状态

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

1
sudo systemctl status hywelstar_service.service

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

1
2
3
4
5
6
7
8
● 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:禁用和停止服务

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

1
2
sudo systemctl stop hywelstar_service.service
sudo systemctl disable hywelstar_service.service

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

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

1
sudo journalctl -u hywelstar_service.service

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

5.总结

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