Systemd 是一个强大的初始化系统和服务管理器,当前绝大多数 Linux 系统都在使用它。它可以轻松管理服务、自动化活动并提高系统效率。
在本文中,我们将引导您完成在 Linux 上创建新的 systemd 服务的过程。
先决条件
创建新 systemd 服务的步骤
在 Linux 上创建新的 systemd 服务涉及多个步骤。要设置您的服务,请按照以下步骤操作:
制作服务文件
第一步是构建 systemd 服务文件,它定义服务的配置和行为。服务文件必须位于/etc/systemd/system/ directory
并且必须具有 .service 扩展名。
启动终端或命令提示符。
使用文本编辑器创建一个新的服务文件。例如,您可以使用 nano 编辑器:
sudo nano /etc/systemd/system/<filename>.service
根据您的要求定义服务文件中的部分和参数。为了帮助您入门,这里有一个基本模板:
Description=Service for virtual machines hosted on VMware
Documentation=http://open-vm-tools.sourceforge.net/about.php
ConditionVirtualization=vmware
DefaultDependencies=no
Before=cloud-init-local.service
After=vgauth.service
After=apparmor.service
RequiresMountsFor=/tmp
After=systemd-remount-fs.service systemd-tmpfiles-setup.service systemd-modules-load.service
[Service]
ExecStart=/usr/bin/vmtoolsd
TimeoutStopSec=5
[Install]
WantedBy=multi-user. target
Alias=vmtoolsd.service
单元:
在该部分中提供您的服务及其所需的任何依赖项的描述[Unit]
。例如,once=network.target 可确保服务在网络运行后立即开始。
服务:
在该部分中输入 ExecStart 要执行的命令或程序[Service]
。设置重新启动以指定 systemd 如何处理服务重新启动(例如,始终、失败时)。
安装:
在 部分中定义应激活您的服务的目标[Install]
。default.target 是一个流行的选项。
设置服务文件
为了进行演示,让我们开发一个示例服务,该服务使用 Nmap 扫描计算机的端口,并每 30 秒将结果保存到文件中。以下是服务单元文件结构的示例:
[Unit]
Description=Demonstration of custom nmap service.
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/nmap -sS -O -oN /home/<user>/results.txt localhost
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
在这个例子中:
- 描述提供了服务的快速概述。
- After=network.target 确保服务仅在网络运行后开始。
- 正常的流程服务用type=simple表示。
- Restart=always 保证服务终止时重新启动。
- RestartSec=30 指定重新启动之间的时间间隔为 30 秒。
- User=root 指示服务以 root 用户身份运行。
- ExecStart 包含程序的命令和任何相关参数。
cloudbooklet@ubuntu:~$ sudo systemctl enable nmapper.service
Created symlink /etc/systemd/system/multi-user.target.wants/nmapper.service _ /etc/systemd/system/nmapper.service
cloudbooklet@ubuntu:~$ sudo systemctl start nmapper.service
cloudbooklet@ubuntu:~$ sudo systemctl status nmapper.service
_ nmapper.service - Demonstration of custom nmap service
Loaded: loaded (/etc/systemd/system/nmapper.service; enabled; preset: enabled)
Active: active (running) since Tue 2023-06-27 02:40:10 IST; 3s ago
Main PID: 3160 (nmap)
Tasks: 1 (limit: 4590)
Memory: 53.4M
CPU: 476ms
CGroup: /system.slice/nmapper.service
L160 /usx/bin/nmap -sS -A -0 localhost -oN /home/debxrshi/results.txt
Jun 27 02:40:10 debian systemd[1]: Started nmapper.service - Demonstration of custom nmap service..
Jun 27 02:40:11 debian nmap[3160]: Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-27 02:40 IST
cloudbooklet@ubuntu:~$
启用并启动服务
要启用并启动服务,请使用 systemctl 命令。采取以下步骤:
允许该服务在计算机启动时自动启动:
sudo systemctl enable <filename>.service
启动服务:
sudo systemctl start <filename>.service
检查服务的状态以确认其正常运行并且没有错误:
sudo systemctl status <filename>.service
systemd 服务的单元类型
Unit Type | Description |
---|---|
service | A service on the system that includes instructions for starting, restarting, and halting the service. |
socket | A network socket that is linked to a service. |
device | A device that is explicitly handled by systemd. |
mount | A mountpoint that is maintained by systemd. |
automount | At boot, a mountpoint is automatically mounted. |
swap | Change the system’s space. |
target | A point of synchronisation for other units. Typically used to launch enabled services when the computer boots. |
path | A path for activation depending on a path. You can, for example, launch services based on the state of a specific path, such as whether it exists or not. |
timer | A timer that allows you to arrange the activation of another unit. |
snapshot | A snapshot of the present condition of systemd. Typically used to undo temporary changes to systemd. |
slice | Resource restriction via Linux Control Group nodes (cgroups). |
scope | Data from systemd bus interfaces. Typically, it is used to handle external system processes. |
另请阅读:您可能还会发现我们关于如何在 Linux 中打开端口的指南很有用:简单的分步指南
结论
在 Linux 上添加新的 systemd 服务是一个简单的步骤,可以显着提高自动化和效率。您可以按照分步指南轻松开发在后台运行并在系统启动时自动启动的自定义服务。让您的Linux系统自动执行任务,以获得简化操作的好处。
请随时在下面的评论部分分享您的想法和反馈。
原创文章,作者:主机说,如若转载,请注明出处:https://www.hostingtalk.cn/create-a-new-systemd-service-on-linux/