Linux下systemd服务配置

Linux下systemd服务配置

systemctl命令

systemctl start 服务名            开启服务
systemctl stop 服务名            关闭服务
systemctl status 服务名        显示状态
systemctl restart 服务名        重启服务
systemctl enable 服务名        开机启动服务
systemctl disable 服务名        禁止开机启动
systemctl list-units              查看系统中所有正在运行的服务
systemctl list-unit-files        查看系统中所有服务的开机启动状态
systemctl list-dependencies 服务名          查看系统中服务的依赖关系
systemctl mask 服务名                        冻结服务
systemctl unmask 服务名                      解冻服务
systemctl set-default multi-user.target     开机时不启动图形界面(字符界面)
systemctl set-default graphical.target      开机时启动图形界面
systemctl daemon-reload # 修改配置文件以后,需要重新加载配置文件,然后重新启动相关服务
systemctl enable postgresql.service # 设置服务开机自启动
systemctl is-enabled postgresql.service # 查询是否自启动服务
systemctl disable postgresql.service # 取消服务器开机自启动

# 显示某个 Unit 是否正在运行
systemctl is-active application.service

# 显示某个 Unit 是否处于启动失败状态
systemctl is-failed application.service

# 显示某个 Unit 服务是否建立了启动链接
systemctl is-enabled application.service
# 查看每个服务的启动耗时
systemd-analyze blame
# 查看当前运行的所有服务 
systemctl list-units
# 查看服务是否开机启动
systemctl list-unit-files

service配置文件

https://zhuanlan.zhihu.com/p/566818301

https://zhuanlan.zhihu.com/p/443473996

https://blog.csdn.net/w2009211777/article/details/125489179

systemd服务文件(service file)是用来定义和配置systemd服务的文件,通常以.service为后缀。

systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。

systemctl enable命令用于在上面两个目录之间,建立符号链接关系。

开机时,systemd只执行/etc/systemd/system目录里面的配置文件。

配置文件的区块

service文件定义了一个服务,分为[Unit][Service][Install] 三个区块。

Unit

[Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系。它的主要字段如下。

[Unit] # 表示启动顺序和依赖关系
Description: 服务的描述信息。
Documentation: 文档地址
Requires: 当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败。值一般是:network.target remote-fs.target nss-lookup.target
Wants: 与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
BindsTo: 与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行
Before: 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
After: 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动
Conflicts: 这里指定的 Unit 不能与当前 Unit 同时运行
Condition...: 当前 Unit 运行必须满足的条件,否则不会运行。比如ConditionPathExists
Assert...: 当前 Unit 运行必须满足的条件,否则会报启动失败

Service

[Service]区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。

[Service] # 服务的启动行为以及如何启动、重启、停止等信息
Type: 定义启动时的进程行为。它有以下几种值:
 - simple: 默认值,执行ExecStart指定的命令,启动主进程(前台程序一般用这个)
 - forking: 以 fork 方式从父进程创建子进程,创建后父进程会立即退出(后台程序一般用这个)
 - oneshot: 一次性进程,Systemd 会等当前服务退出,再继续往下执行
 - dbus: 当前服务通过D-Bus启动
 - notify: 当前服务启动完毕,会通知Systemd,再继续往下执行
 - idle: 若有其他任务执行完毕,当前服务才会运行
WorkingDirectory: 工作目录
User: 指定运行的用户
Group: 指定运行的用户组
EnvironmentFile: 服务运行时的环境变量文件
Environment: 定义服务运行时的环境变量
ExecStartPre: 启动当前服务之前执行的命令
ExecStart: 启动当前服务的命令
ExecStartPost: 启动当前服务之后执行的命令
ExecReload: 重启当前服务时执行的命令
ExecStop: 停止当前服务时执行的命令
ExecStopPost: 停止当其服务之后执行的命令
RestartSec: 自动重启当前服务间隔的秒数
Restart: 何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure(在非零错误码时重启)、on-abnormal、on-abort、on-watchdog
TimeoutSec: 服务的超时时间,超过该时间仍未启动或停止,则会停止该服务

Install

[Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。它的主要字段如下。

[Install] # 表示如何安装配置文件
Alias: 服务别名
WangtedBy: 它的值是一个或多个 Target,指定服务所属的目标(target),当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中。一般是multi-user.target
RequiredBy: 它的值是一个或多个 Target,指定依赖该服务的其他单元,确保在这些单元启动之前启动该服务。当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中
Also: 当前 Unit 激活(enable)时,会被同时激活的其他 Unit

一些模板

自动重启的程序

自动启动和管理应用程序,确保它们始终运行并具备可靠的重启机制,或用于定义和管理后台运行的服务程序。

[Unit]
Description=My Service
After=network.target

[Service]
ExecStart=/path/to/your/program.sh
WorkingDirectory=/path/to/working/directory
User=your_username
Group=your_groupname
Restart=always

[Install]
WantedBy=multi-user.target

定时器服务单元

主要用于以下任务场景

  • 定时任务调度:用于按照指定的时间表调度任务,例如在特定时间执行备份任务、清理临时文件等。
  • 周期性任务触发:可以周期性地触发任务的执行,例如定时检查系统状态、生成报告等。
  • 自动化作业调度:可以用于自动化作业调度,运行脚本、执行任务,实现系统管理和自动化操作。
[Unit]
Description=My Timer
Requires=my_service.service

[Timer]
OnCalendar=*-*-* 00:00:00
Unit=my_service.service

[Install]
WantedBy=timers.target

路径服务单元

路径单元(Path Unit)通常用于监视文件或目录的变化,并在发生特定事件时触发相应的操作。它是systemd服务管理器中的一种单元类型,用于对文件系统路径进行监控。

  • 路径单元适用于以下场景:自动触发服务重启:你可以设置路径单元来监视某个文件或目录的变化,当该文件或目录发生修改、创建或删除时,路径单元会触发相应的服务重启操作,以便及时应用变化.
  • 动态加载服务:通过路径单元,你可以监视一个目录,当该目录中出现新的文件时,路径单元会自动加载相应的服务,从而实现动态加载和卸载服务的功能。
  • 文件状态检查和处理:路径单元可以用于检查文件或目录的状态,例如监控一个特定的配置文件,当该文件被删除或损坏时,路径单元可以触发相应的处理操作,例如恢复备份文件或发出警报。
  • 监控日志文件:你可以使用路径单元监视特定的日志文件,当日志文件发生变化时,路径单元可以触发服务重启、日志分割或其他相关操作,以确保持续的日志监控和处理。
[Unit]
Description=My Path
Requires=my_service.service

[Path]
PathExists=/path/to/your/file

[Install]
WantedBy=paths.target

服务管理实例

img

这个列表显示每个配置文件的状态,一共有四种。

  • enabled:已建立启动链接;表示允许开机启动
  • disabled:没建立启动链接;表示禁止开机启动
  • static:该配置文件没有[Install]部分(无法执行),只能作为其他配置文件的依赖
  • masked:该配置文件被禁止建立启动链接
# 显示sshd服务的状态 
$ systemctl status sshd

img

  • Loaded行:配置文件的位置,是否设为开机启动
  • Active行:表示服务的当前状态
    • active(running) 表示程序正在执行;
    • active(exited) 执行一次就正常退出的服务,不在系统中执行任何程序;
    • active(waiting) 正在执行中,处于阻塞状态,需要等待其他程序执行完才能执行;
    • inactive (dead) 未启动状态;
  • Main PID行:主进程ID
  • CGroup块:应用的所有子进程
  • 日志块:应用的日志
posted @ 2024-02-21 09:31  3的4次方  阅读(440)  评论(0)    收藏  举报