Systemd服务单元

news2024/9/23 21:31:43

Systemd服务单元

  • service服务文件基本格式
    • 自定义service文件
    • systemctl定时重启
    • service文件中的type
  • systemctl管理service
    • 查看服务状态
      • 查看服务是否运行
      • 查看服务是否被启用
    • 查看开机自启服务列表
    • 设置开机启动
      • 开机启动的原理:
    • 取消开机启动
    • 启动/暂停/重启服务
    • 重新加载配置
    • 检查service是否在启动状态
    • 检测unit单元是否为自动启动
    • 注销一个服务(service)/冻结服务
    • 取消注销服务(service)/解冻服务
    • 显示单元的手册页(前提是由unit提供)
    • 重新载入整个systemd的系统配置并扫描unit文件的变动
  • systemctl查看类操作
    • 查看指定服务的依赖关系
      • 和依赖关系
    • 列出服务
      • 列出所有已经加载的systemd `units`
      • 查看是否存在某个服务
      • `列出`指定状态的`服务`
        • 列出活跃(`active`)状态的服务(运行或退出)
        • 列出正在运行(`runing`)状态的服务
        • 列出所有service
        • 列出所有`enabled`状态的服务
        • 列出所有`disabled`状态的服务
        • 列出错误的服务/列出状态为`failed`的服务

service服务文件基本格式

service文件参数详解: https://blog.csdn.net/stone_fall/article/details/108630115

NetworkManager.service的文件示例

# 查看NetworkManager的service文件
[root@c8 ~]# cat /usr/lib/systemd/system/NetworkManager.service

[Unit]
# 定义的描述
Description=Network Manager
Documentation=man:NetworkManager(8)
# 依赖服务
Wants=network.target  
# 在network-pre.targe启动完成后启动--前置条件
After=network-pre.target dbus.service
# 本服务启动后再启动的unit--后置条件
Before=network.target network.service

[Service]
# 类型
Type=dbus
BusName=org.freedesktop.NetworkManager
# 需要加载的内容
ExecReload=/usr/bin/busctl call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Reload u 0
#ExecReload=/bin/kill -HUP $MAINPID

# 启动前置命令
ExecStartPre=/bin/sh -xc '! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service'
# 需要启动的程序
ExecStart=/usr/sbin/NetworkManager --no-daemon
Restart=on-failure
# NM doesn't want systemd to kill its children for it
# 意思是以进程方式关闭
KillMode=process
# 兼容性
CapabilityBoundingSet=CAP_NET_ADMIN CAP_DAC_OVERRIDE CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SETGID CAP_SETUID CAP_SYS_MODULE CAP_AUDIT_WRITE CAP_KILL CAP_SYS_CHROOT
# 系统保护
ProtectSystem=true
# 保护家目录
ProtectHome=read-only

# We require file descriptors for DHCP etc. When activating many interfaces,
# the default limit of 1024 is easily reached.
LimitNOFILE=65536


[Install]
# 定义service放在哪个target里面
WantedBy=multi-user.target
# 服务的别名
Alias=dubs-org.freedesktop.NetworkManager.service
Also=NetworkManager-dispatcher.service

# We want to enable NetworkManager-wait-online.service whenever this service
# is enabled. NetworkManager-wait-online.service has
# WantedBy=network-online.target, so enabling it only has an effect if
# network-online.target itself is enabled or pulled in by some other unit.
Also=NetworkManager-wait-online.service

自定义service文件

服务文件存放在/usr/lib/systemd/system目录

[Unit]
# 定义的描述
Description=Network Manager
# 检查文件是否可执行文件,如果不是则不启动
ConditionFileIsExecutable=/usr/bin/test.sh
[Service]
# 类型
Type=notify
# 以指定用户运行
User=user1
Group=user1
# 工作目录
#WorkingDirectory=/usr/bin/
# 需要启动的程序
ExecStart=/usr/bin/test.sh &
# 服务停止时的命令
## 命令要以绝对路径执行
ExecStop=/usr/bin/killall test.sh
# 需要重载的内容
ExecReload=/bin/kill -HUP $MAINPID
# 延迟3秒启动
ExecStartPre=/bin/sleep 3
# 服务启动超时时间为60秒
TimeoutStartSec=60
# 是否自动重启
Restart=always
# 运行最大秒数(定时重启)
## 604800秒=7天
RuntimeMaxSec=604800
# 重启间隔时间
RestartSec=2s

[Install]
# 如果想要执行enable,必须写Install的内容
## 一般情况下都写multi-user.target
WantedBy=multi-user.target

systemctl定时重启

https://blog.chaos.run/dreams/systemd-unit-schedule-restart/

[Service]
# 是否自动重启
Restart=always
# 运行最大秒数(定时重启)
## 604800秒=7天
RuntimeMaxSec=604800
# 重启间隔时间
RestartSec=2s

service文件中的type

https://blog.csdn.net/Sardkit/article/details/79911925
先看看type的种类和解释:

Type类型作用
Type=simple (默认值)systemd认为该服务将立即启动。服务进程不会 fork 。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket 激活型。
Type=oneshot这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
Type=notify与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
Type=dbus若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
Type=idlesystemd会等待所有任务处理完成后,才开始执行 idle 类型的单元。其他行为与 Type=simple 类似。
Type=forkingsystemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程

从上表可以看到,当类型为forking时,systemd会认为所运行当该服务本身是守护进程即本身会fork,且只有父进程退出后systemd才会退出,但由于参考例子并不是守护进程,故systemd一直处于阻塞等待状态,默认的simple无等待这一环节。


systemctl管理service

systemctl命令与sysvinit命令的对应关系

systemd提供systemctl命令来运行关闭重启显示启用/禁用系统服务。
systemd提供systemctl命令与sysvinit命令的功能类似

当前版本中依然兼容servicechkconfig命令,相关说明如下表, 但建议用systemctl进行系统服务管理。

sysvinit命令systemd命令备注
service network startsystemctl start network.service用来启动一个服务 (并不会重启现有的)。
service network stopsystemctl stop network.service用来停止一个服务 (并不会重启现有的)。
service network restartsystemctl restart network.service用来停止并启动一个服务。
service network reloadsystemctl reload network.service当支持时,重新装载配置文件而不中断等待操作。
service network condrestartsystemctl condrestart network.service如果服务正在运行那么重启它。
service network statussystemctl status network.service检查服务的运行状态。
chkconfig network onsystemctl enable network.service在下次启动时或满足其他触发条件时设置服务为启用。
chkconfig network offsystemctl disable network.service在下次启动时或满足其他触发条件时设置服务为禁用。
chkconfig networksystemctl is-enabled network.service用来检查一个服务在当前环境下被配置为启用还是禁用。
chkconfig \-\-listsystemctl list-unit-files \-\-type=service输出在各个运行级别下服务的启用和禁用情况。
chkconfig network \-\-listls /etc/systemd/system/*.wants/network.service用来列出该服务在哪些运行级别下启用和禁用。
chkconfig network \-\-addsystemctl daemon-reload当您创建新服务文件或者变更设置时使用。

查看服务状态

# 查看服务状态
systemctl status 服务名

相关状态显示参数说明如下表所示参数

参数描述
Loaded说明服务是否被加载,并显示服务对应的绝对路径以及是否启用。
Active说明服务是否正在运行,并显示时间节点。
Main PID相应的系统服务的PID值。
CGroup相关控制组(CGroup)的其他信息。

查看服务是否运行

# 查看服务是否运行
systemctl is-active name.service
状态含义
active(running)有一只或多只程序正在系统中执行
active(exited)仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。 举例来说,开机或 者 是挂载时才会进行一次的 quotaon 功能
active(waiting)正在执行当中,不过要等待其他的事件才能继续处理。例如:打印的队列相关服务 就是 这种状态,虽然正在启动中,不过也需要真的有队列进来 (打印作业) 这样他才会继续唤 醒打印机 服务来进行下一步打印的功能
inactive这个服务没有运行

查看服务是否被启用

# 判断某个服务是否被启用
systemctl is-enabled name.service

is-enabled命令的返回结果如下:

状态含义
“enabled”已经通过 /etc/systemd/system/ 目录下的 Alias= 别名、 .wants/ 或 .requires/ 软连接被永久启用。
“enabled- runtime”已经通过 /run/systemd/system/ 目录下的 Alias= 别名、 .wants/ 或 .requires/ 软连接被临时启用。
“linked”虽然单元文件本身不在标准单元目录中,但是指向此单元文件的一个或多个软连接已经存在于 /etc/systemd/system/ 永久目录中。
“linked-runtime”虽然单元文件本身不在标准单元目录中,但是指向此单元文件的一个或多个软连接已经存在于 /run/systemd/system/ 临时目录中。
“masked”已经被 /etc/systemd/system/ 目录永久屏蔽(软连接指向 /dev/null 文件),因此 start 操作会失败。
“masked- runtime”已经被 /run/systemd/systemd/ 目录临时屏蔽(软连接指向 /dev/null 文件),因此 start 操作会失败。
“static”尚未被启用,并且单元文件的 “[Install]” 小节中没有可用于 enable 命令的选项。
“indirect”尚未被启用,但是单元文件的 “[Install]” 小节中 Also= 选项的值列表非空(也就是列表中的某些单元可能已被启用)、或者它拥有一个不在 Also= 列表中的其他名称的别名软连接。对于模版单元来说,表示已经启用了一个不同于 DefaultInstance= 的实例。
“disabled”尚未被启用,但是单元文件的 “[Install]” 小节中存在可用于 enable 命令的选项
“generated”单元文件是被单元生成器动态生成的。被生成的单元文件可能并未被直接启用,而是被单元生成器隐含的启用了。
“transient”单元文件是被运行时API动态临时生成的。该临时单元可能并未被启用。
“bad”单元文件不正确或者出现其他错误。 is-enabled 不会返回此状态,而是会显示一条出错信息。 list-unit-files 命令有可能会显示此单元。

查看开机自启服务列表

# 查看开机自启服务列表
systemctl list-unit-files | grep enabled

# 列出所有enabled状态的服务
systemctl list-unit-files --state=enabled

在这里插入图片描述


设置开机启动

systemctlenabledisablemask子命令里面增加了--now选项,可以激活同时启动服务,激活同时停止服务等。

# 设置开机启动并现在启动
## 相当于同时执行了systemctl start 服务名
systemctl enable --now firewalld

开机启动的原理:

设置开启自启动就是把service文件/usr/lib/systemd/system/创建一个软链接到/etc/systemd/system/multi-user.target.wants/;
其中[Install]字段决定了,启动服务文件链接到/etc/systemd/system/的哪个target目录下.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# systemctl enable firewalld.service 等同于软连接命令
ln -s '/usr/lib/systemd/system/firewalld.service' '/etc/systemd/system/multi-user.target.wants/firewalld.service'

# 查看服务状态
systemctl status firewalld

取消开机启动

# 取消开机启动并现在就停止服务
systemctl disable --now firewalld

## systemctl disable bluetooth.service原理
Removed /etc/systemd/system/bluetooth.target.wants/bluetooth.service. 
Removed /etc/systemd/system/dbus-org.bluez.service.

## 查看服务状态是否停止
systemctl status firewalld

在这里插入图片描述

# 查看启动列表
systemctl list-unit-files |grep firewalld

在这里插入图片描述


启动/暂停/重启服务

# 启动服务
systemctl start firewalld

# 停止服务
systemctl stop firewalld

# 重启服务
systemctl restart 服务名

重新加载配置

# 重新加载配置
systemctl reload 服务名

检查service是否在启动状态

写脚本时判断服务器是否启动很管用

# systemctl is-active 服务名
systemctl is-active NetworkManager

在这里插入图片描述


检测unit单元是否为自动启动

写脚本时判断服务器是否开机自启很管用

# systemctl is-enabled 服务名
systemctl is-enabled firewalld

在这里插入图片描述


注销一个服务(service)/冻结服务

systemctl mask 是注销服务的意思。
注销服务意味着:
该服务在系统重启的时候不会启动
该服务无法进行做systemctl start/stop操作
该服务无法进行systemctl enable/disable操作

# 注销服务
systemctl mask firewalld

# 注销服务并现在停止
systemctl mask --now firewalld

取消注销服务(service)/解冻服务

# 取消注销服务(service)/解冻服务
## --now 现在启动
systemctl unmask --now firewalld

显示单元的手册页(前提是由unit提供)

# 查看帮助
systemctl help

# 查看帮助
man 5 systemctl

重新载入整个systemd的系统配置并扫描unit文件的变动

# 重载改动过的服务
systemctl daemon-reload

systemctl查看类操作


查看指定服务的依赖关系

# 查看系统启动服务的依赖关系 
systemctl list-dependencies -l

在这里插入图片描述

# 查看指定服务的倚赖关系
systemctl list-dependencies sshd

在这里插入图片描述


和依赖关系

在这里插入图片描述


列出服务


列出所有已经加载的systemd units

# 列出所有已经加载的systemd units
systemctl

# 从已加载的服务中过滤服务名
systemctl | grep docker.service

查看是否存在某个服务

# 查看是否存在某个服务
systemctl --type=service|grep 服务名

列出指定状态的服务


列出活跃(active)状态的服务(运行或退出)

# 列出所有active状态(运行或退出)的服务
systemctl list-units --type=service --state=active

列出正在运行(runing)状态的服务

# 列出正在运行(runing)状态的服务
systemctl list-units --type=service --state=running

列出所有service

# 列出所有service
systemctl list-units --type=service
systemctl --type=service

# 列出所有service,包括未运行的服务
systemctl list-units --type service --all

列出所有enabled状态的服务

# 列出所有enabled状态的服务
systemctl list-unit-files --state=enabled
systemctl --state=enabled

列出所有disabled状态的服务

# 列出所有disable状态的服务
systemctl list-unit-files --state=disabled
systemctl --state=disabled

列出错误的服务/列出状态为failed的服务

# 列出错误的服务
systemctl --type service --state failed


# 列出所有正在运行或failed状态的服务
systemctl list-units --type service --state running,failed
systemctl --type service --state running,failed

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/749064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day04 重新学python——数据容器

文章目录 一、数据容器1.数据容器:list(列表)2.list(列表)的遍历3.数据容器:tuple(元组)4.数据容器:str(字符串)5.数据容器的切片6.数据容器:set(集合)7.数据容器:dict(字典、映射)8.数据容器的通用操作 一、数据容器 …

Vue2:简单使用Animate.css动画效果

简单的使用一下Animate的动画效果(安装,使用,速度) 官网:动画.css |CSS动画的跨浏览器库。 (animate.style)https://animate.style/ 1、通过npm安装: npm install animate.css --save 2、导入到组件 i…

第一百零六天学习记录:数据结构与算法基础:单链表(王卓教学视频)

线性表的链式表示和实现 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻 线性表的链式表示又称为非顺序映像或链式映像。 用一组物理位置任意的存储单元来存放线性表的数据元素。 这组存储单元既可以是连续的,也可以是不连续的…

Thymeleaf th名称空间-表达式语法-访问域对象-获取请求参数-内置对象

基本语法&#xff1a;th名称空间 基本语法&#xff1a;表达式语法 修改标签文本值 代码示例&#xff1a; <p th:text"标签体新值">标签体原始值</p>th:text作用 不经过服务器解析&#xff0c;直接用浏览器打开HTML文件&#xff0c;看到的是『标签体原…

使用C语言连接MySQL

目录 一、引入库 1.1 下载库文件 1.2 在项目中引入库 二、使用库 2.1 连接数据库 2.2 SQL请求 2.3 获取查询结果 2.4 使用案例 一、引入库 1.1 下载库文件 要使用C语言连接MySQL&#xff0c;需使用MySQL官网提供的库 MySQL :: Download Connector/Chttps://dev.mysq…

家政服务小程序开发预约功能

家政服务的需求也越来越大&#xff0c;为了更加方便用户预约服务&#xff0c;很多家政服务平台开始开发微信小程序&#xff0c;为用户提供在线预约服务。那么&#xff0c;如何开发家政服务小程序的预约功能呢&#xff1f;下面我们将结合一些参考信息&#xff0c;为大家详细介绍…

vue-element-admin || 后台管理三级/多级菜单设置

如图&#xff0c;基于vue-element-admin前端框架实现三级菜单&#xff0c;其中页面只对应三级菜单&#xff0c;无二级菜单的页面。 文件组织&#xff0c;在views文件夹下如下组织文件结构&#xff0c;其中第三级的菜单就是具体的.vue文件 在一级菜单hxb_sys下&#xff0c;要…

PROFIBUS-DP主站转ETHERCAT网关连接canopen协议报文解析实例

大家好&#xff0c;今天要给大家介绍一款远创智控的神秘产品&#xff0c;它的名字叫YC-DPM-ECT&#xff0c;是一款兼具PROFIBUS-DP主站功能的通讯网关。想象一下&#xff0c;它既能和PROFIBUS总线打交道&#xff0c;又能与ETHERCAT网络愉快地交流&#xff0c;是不是感觉很神奇&…

【Arduino小车实践】PID应用之四驱小车

一、 PID公式 二、 PID应用的必要性 1. 四驱小车运动 左边两个驱动轮和右边两个驱动轮的速度相同直线右边轮子的速度大于左边轮子的速度左偏右边轮子的速度小于左边轮子的速度 右偏 2. 产生多种运动的原因 小车的4个电机&#xff0c;减速箱以及车轮在物理层面上存在误差&am…

Spark(21):SparkStreaming之DStream入门

目录 0. 相关文章链接 1. WordCount 案例实操 1.1. 需求 1.2. 添加依赖 1.3. 编写代码 1.4. 启动程序并通过netcat发送数据 2. WordCount 解析 0. 相关文章链接 Spark文章汇总 1. WordCount 案例实操 1.1. 需求 使用 netcat 工具向 9999 端口不断的发送数据&#xf…

Flutter系列文章-Flutter环境搭建和Dart基础

Flutter是Google推出的一个开源的、高性能的移动应用开发框架&#xff0c;可以用一套代码库开发Android和iOS应用。Dart则是Flutter所使用的编程语言。让我们来看看如何搭建Flutter开发环境&#xff0c;并了解Dart语言的基础知识。 一、Flutter环境搭建 1. 安装Flutter SDK …

Blender 3.6 LTS更新的5个新功能,一定要试试

Blender基金会已正式发布Blender 3.6 LTS&#xff08;长期支持&#xff09;。它是备受期待的该公司开源 3D 软件的长期支持版本&#xff0c;也是 Blender 3.x 系列的最终 LTS 版本。Blender 3.6有一个用于设置基于粒子的模拟的模拟节点和一个升级的 UV 封装系统&#xff0c;其中…

IDEA自动添加注释作者版本时间等信息

File | Settings | Editor | Live Templates 点击加号&#xff0c;选择第二项 设置一个名称 再次点击加号&#xff0c;选择第一项 填写名称&#xff08;设置完成后再代码中输入该名称即可插入该注释内容&#xff09;&#xff0c;描述&#xff0c;及内容 /*** author 名字…

深度图像Range Image

从点云创建深度图并显示 函数原型 RangeImage::createFromPointCloud (const PointCloudType& point_cloud, float angular_resolution, float max_angle_width, float max_angle_height, …

Leaflet Ant Path(水系流动效果)

一、源代码&#xff1a; 用leaflet库中的Leaflet.AntPath插件 将通量动画&#xff08;如蚂蚁行走&#xff09;放入折线中 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><…

【UE】运行游戏时就获取鼠标控制

问题描述 我们经常在点击运行游戏后运行再在视口界面点击一下才能让游戏获取鼠标控制。其实只需做一个设置就可以在游戏运行后自动获取鼠标控制。 解决步骤 点击编辑器偏好设置 如下图&#xff0c;点击“播放”&#xff0c;再勾选“游戏获取鼠标控制” 这样当你运行游戏后直…

12、k8s Namespaces 资源隔离

Kubernetes Namespaces _ Kubernetes(K8S)中文文档_Kubernetes中文社区 Kubernetes Namespaces 实现资源隔离和配额的隔离,比如下面的信息: 所有对象都在Namespace中? 大多数Kubernetes资源(例如pod、services、replication controllers或其他)都在某些Namespace中,…

【LeetCode热题100】打卡第36天:多数元素打家劫舍

文章目录 【LeetCode热题100】打卡第36天&#xff1a;多数元素&打家劫舍⛅前言 多数元素&#x1f512;题目&#x1f511;题解 打家劫舍&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第36天&#xff1a;多数元素&打家劫舍 ⛅前言 大家好&#xff0c;我是…

pytorch安装问题【超级简单版】

pytorch安装问题 当前遇到的问题&#xff1a; python3.9无法安装读取coco数据集的 pycocotools-windows,那么需要切换版本到3.6/7/8&#xff0c;但是切换到python 3.6之后&#xff0c;无法安装torchvision和pytorch【在python就叫torch】&#xff0c;显示没有这个版本 pip i…

MS1205N激光测距用高精度时间测量(TDC)电路

MS1205N 是一款高精度时间测量 (TDC) 电路&#xff0c;具有四通 道、多脉冲的采样能力、高速 SPI 通讯、多种测量模式&#xff0c;适合 于激光雷达和激光测距。 主要特点  单精度模式 60ps  双精度模式 30ps  非校准测量范围 3.5ns(0ns) 至 25μs  单…