Systemd 配置服务管理
原创转载:https://blog.csdn.net/qq_41084756/article/details/130200523#
1:Systemd 案例#
systemd 是 Linux 系统中现代化的初始化系统,可以使用 systemctl 命令实现管理 启动、关闭、自启动
等服务。
在systemd中,可以通过创建一个service文件,把要执行的命令放在其中,然后将其添加到systemd的自启动项中。
具体操作步骤如下:
0x01:在
/etc/systemd/system
目录下创建一个.service
文件。
# 注意 service 文件的名字也是 systemd 启动的名字,例如 systemctl start myservice
vim /etc/systemd/system/myservice.service
0x02:编写.service 文件。
# 在打开的文件中添加以下内容,注意将其中的 ExecStart 替换为需要管理的命令或脚本
[Unit]
Description=My Service
After=network.target
[Service]
Type=simple
ExecStart=sudo /path/to/my/command
User=root
[Install]
WantedBy=multi-user.target
0x03:以下是 service 文件中出现的参数解释。
Unit: systemd服务文件的一个部分,用于定义服务的基本信息。
- Description字段包含了一个简短的描述,用于描述服务的名称,方便用户在查找时快速了解服务的作用。
- After=network.target表示此服务会在网络服务启动后启动。
- network.target是指网络目标单元,是Systemd中预定义的一个特殊单元,用于表示网络服务的启动状态。几乎所有的网络服务,例如DHCP、DNS解析等,在启动时都依赖于网络服务的可用性。因此,将After=network.target添加到服务的unit文件中,可以确保该服务在网络服务就绪后再启动,从而避免出现启动时的依赖性错误。
Service: 是systemd服务文件中的另一个部分,用于定义服务的具体行为。
- Type字段是服务运行时的类型,simple表示它是一个后台进程,通常用于只有一个进程的服务。
- ExecStart字段包含了要运行的命令,多个命令可以用换行符(\n)隔开。
- User字段指定了以哪个用户的身份运行这个服务,这里选择root用户。
Install: 定义了systemd服务的安装信息。
- WantedBy字段指定了服务将要执行的“target”(一种操作系统运行级别),这里指定的“multi-user.target”是Linux系统默认的、包含多个用户的运行级别,相当于传统的“init 3”运行级别。这意味着服务将在系统启动时自动运行。
2:Systemd 命令#
# 保存并退出上述 Systemd 案例,启动服务&系统自启动
systemctl start myservice
systemctl enable myservice
# 使用 systemctl命令查看服务状态:
systemctl status myservice.service
# 关闭服务&系统关闭自启动
systemctl stop myservice
systemctl disable myservice
3:Systemd 文件#
3.1:介绍#
Systemd 服务文件通常存放在 /etc/systemd/system
目录下。
Systemd 服务文件通常是以 .service
结尾的文本文件。
服务文件中的格式类似 .ini
配置文件的格式,以 字段 + 键值对
的形式组成。
3.2:字段#
Systemd 服务文件通常包含了以下 [字段]
,每个字段下可配置多个键值对。
配置项 | 作用 |
---|---|
Unit | 服务的全局信息和依赖性声明,如服务名称、描述等。 |
Service | 指定服务的具体配置,如服务执行的命令、工作目录等。 |
Instal | 指定服务的安装方式,如服务的启动级别等。 |
3.3:键值对#
0x01:[Unit] 字段的配置
Key | Value |
---|---|
Description | 对服务的简短描述。 |
Before | 定义服务在其他服务之前启动。 |
After | 定义服务在其他服务之后启动。 |
Requires | 定义服务启动需要哪些其他服务已启动,否则无法启动。 |
PartOf | 定义该服务是其他服务的一部分,如果其他服务停止,该服务也会停止。 |
Wants | 定义服务启动时可同时启动哪些其他服务。 |
Condition... | 定义服务启动的条件,如 ConditionPathExists 表示某个路径存在时才启动该服务。 |
0x02:[Service] 字段的配置
Key | Value |
---|---|
Type | 服务类型,可以是simple、forking、ondemand、notify等。 |
ExecStart | 服务启动命令,可以是单个命令、脚本文件、或者多个命令组成的脚本。 |
ExecStop | 停止服务的命令。 |
User | 定义服务运行的用户。 |
Group | 定义服务运行的用户组。 |
PrivateTmp | 将服务的/tmp目录挂载到私有的命名空间中,以增强安全性。 |
Restart | 定义服务异常退出时如何重启。 |
WorkingDirectory | 定义服务工作目录。 |
Environment | 定义服务的环境变量等。 |
ProtectSystem | 防止服务对系统文件进行修改。 |
NoNewPrivileges | 防止服务通过setuid或setgid等提升权限。 |
0x03:[Install] 字段的配置
Key | Value |
---|---|
WantedBy | 定义在哪些系统运行级别下启用此服务。 |
RequiredBy | 启动其他系统服务时必需启动此服务。 |
3.4:示例#
这个示例中定义了一个名为"MyService"的服务,服务启动时执行 /usr/bin/myservice 命令,执行工作目录为 /var/myservice,运行用户为 myservice。
如果服务异常退出,则每30秒尝试重新启动,最多尝试3次。
最后,服务将在多用户运行级别下启用。
[Unit]
Description=MyService
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/myservice
WorkingDirectory=/var/myservice
User=myservice
Group=myservice
Restart=always
RestartSec=30
StartLimitInterval=400
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
作者:TaoSec
出处:https://www.cnblogs.com/TaoSec/p/18233632
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
声明:所有文章均可转载,不留 出处 是很不礼貌的一种行为 ~~,请尊重知识产权!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通