首页 > 系统相关 >Linux服务Systemd笔记

Linux服务Systemd笔记

时间:2024-01-09 22:00:43浏览次数:41  
标签:Systemd 服务 service 启动 systemd 笔记 system Linux unit

Systemd简介

从 CentOS 7.x 以后,Red Hat系列放弃了一直使用的init启动脚本的方式管理服务,改用systemd 这个启动服务管理机制。该机制的好处有:

  • 平行处理服务,加速开机流程,systemd可以让所有的服务同时启动。
  • 服务依赖性自我检查。
  • 对服务依据功能进行分类,将多个服务集合成一个群组。

systemd 将过去执行脚本通通称为一个服务单位 (unit)。每种服务单位依据功能来区分时,就分类为不同的类型 (type)。

基本的类型有:

  • 系统服务
  • 数据监听与交换的插槽档服务 (socket)
  • 储存系统状态的快照类型
  • 提供不同类似执行等级分类的操作环境 (target)

systemd配置目录有以下三种:

  • /usr/lib/systemd/system/:每个服务最主要的启动脚本设置
  • /run/systemd/system/:系统执行过程中所产生的服务脚本,这些脚本的优先级要比/usr/lib/systemd/system/ 高
  • /etc/systemd/system/:管理员依据主机系统的需求所创建的执行脚本,执行优先级又比/run/systemd/system/ 高

/etc/systemd/system/ 目录下存放的是需要开机执行的服务,该目录下有大量的链接文件,链接到/usr/lib/systemd/system/目录下,该目录下的文件才是systemd实际启动的服务脚本文件。

Systemd 服务单元(unit)分类

上面说到根据不同的功能,服务单元被分为不同的类型,可以根据服务脚本文件的扩展名来区分为以下几种。

  • .service文件——一般服务类型(service unit) 主要是系统服务,包括服务器本身所需要的本级服务以及网络服务。
  • .socket文件——内部程序数据交换的插槽服务器(socket unit) 主要是IPC(Inter-Process Communication)的传输讯息插槽档(socket file)功能。这种服务通常在监控讯息传递的插槽档,当有通过此插槽传递讯息来请求服务时,就依据当时的状态将请求传递到对应的daemon,若果daemon未启动,则启动daemon后传递用户的请求。socket服务一般是比较不会被用到的服务,因此开机时通常会延迟启动。一般用于本机服务比较多,如图形界面的软件大多通过socket来进行数据交换。
  • .target——执行环境类型(target unit) unit的集合(服务集合),即执行若干.service或者.socket。
  • .mount/.automount——文件系统挂载服务(mount/automount unit) 来自网络的自动挂载等与文件系统相关性较高的程序管理。
  • .path——侦测特定文件或者目录类型(path unit) 侦测特定目录来提供服务。如打印服务,通过侦测打印存储目录来启动打印功能。
  • .timer——定时执行的服务(timer unit) 定时执行,类似crontab,但是由systemd主动提供,比crontab更灵活。 其中.service 的系统服务类型最为常见。

Systemd服务状态说明

使用systemctl status命令可以查看当然服务的状态。状态含义如下:

  • Loaded:该行表示此服务是否会开机启动
    • enabled 开机启动
    • disabled 不启动
    • vendor preset 第一次安装时的预设值。
  • Active: 正在执行(running)或没有执行(dead) Active除了running跟dead之外,还有其他几个基本的状态:
  • active(running): 正有一只或多只程序正在系统中执行的意思
  • active(exited): 仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。
  • active(waiting): 正在执行当中,不过还再等待其他的事件才能继续处理。
  • inactive:目前没有运行。 Loaded的状态还有:
  • enabled: 开机时被执行
  • disabled: 开机时不会被执行
  • static: 不可以自己启动(enable不可),不过可能会被其他的enabled的服务来唤醒
  • mask: 无论如何都无法被启动!因为已经被注销(非删除)。

查看系统中的存在的服务

命令如下:

systemctl [command] [--type=TYPE] [--all]

command:

  • list-units:依据unit列出目前有启动的unit,即当前启动的服务。若加上 --all 才会列出没启动的。
  • list-unit-files:依据/usr/lib/systemd/system/内的文件,将所有文件列表说明,即安装的服务。
  • --type=TYPE:就是之前提到的unit type,主要有service,socket,target等 <br> systemctl命令不加参数等同于'systemctl list-units',参数解释如下:
  • UNIT:项目的名称,包括各个unit的类别
  • LOAD:开机时是否会被载入,默认systemctl显示的是有载入的项目而已
  • ACTIVE:目前的状态,须与后续的SUB搭配!就是用'systemctl status'观察时,active 的项目
  • DESCRIPTION:详细描述

查看服务之间的依赖性

命令

systemctl list-dependencies [unit] [--reverse]

--reverse :反向追踪谁使用这个服务单元

systemctl针对service类型的配置文件

systemd的配置文件大部分放置在/usr/lib/systemd/system/ 目录内,该目录存放软件默认的配置,不建议修改。修改的配置文件应该放置在 /etc/systemd/system/目录下。

以vsftpd.service为例,如果要对其进行修改,可以在以下目录中进行操作。

  • /usr/lib/systemd/system/vsftpd.service:官方的默认配置文件;
  • /etc/systemd/system/vsftpd.service.d/custom.conf:在 /etc/systemd/system 下面创建与配置文件相同文件名的目录,但是要加上.d 的扩展名。然后在该目录下创建配置文件即可。配置文件后缀最好为.conf 。该目录下的文件会附件进入入/usr/lib/systemd/system/vsftpd.service
  • /etc/systemd/system/vsftpd.service.wants/*:此目录内的文件为链接文件,设置依赖服务的链接。意思是启动了vsftpd.service 之后,最好再启动这目录下面建议的服务。
  • /etc/systemd/system/vsftpd.service.requires/*:此目录内的文件为链接文件,设置依赖服务的链接。意思是在启动vsftpd.service之前,需要事先启动哪些服务的意思。

服务文件字段解释

[Unit]部分

  • Description 服务描述说明。
  • Documentation 详尽的文档。
  • After 位于哪个daemon启动之后,但非强制要求必须等前置服务启动后才能启动。
  • Before 定义此unit需要在哪个daemon后启动,即设置依赖。
  • Wants 规范这个unit之后最好还要启动什么服务,非强制性。
  • Conflicts 代表冲突服务。

[Service]部分

  • Type 说明这个daemon的启动方式,影响ExecStart。类型如下:
    • simple: 默认值,daemon主要由ExecStart后面的指令来启动,启动后常驻内存。
    • forking: 由ExecStart启动的程序通过spawns延伸出其他的子程序来作为此daemon的主要服务。原生的父程序在启动结束后就会终止运行。传统unit大多属于这类。如httpd
    • oneshot: 与simple类似,不过程序工作完后就结束,不常驻内存。
    • dbus: 与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才能继续运行。因此,此类unit通常要设置BusName才行。
    • idle: 与simple类似,但必须要所有工作都顺利执行完毕后才会执行。此类通常是开机到最后才执行。
    • EnvironmentFile: 启动脚本的环境配置文件,可以使用Environment后接多个不同的Shell变量。
    • ExecStart: 实际执行的指令和脚本程序,还可以使用ExecStartPre和ExecStartPost来设置额外的指令行为,需要注意的是指令串接受"指令 参数 参数..."的格式,不能接受'<','>','>>','|','&'等特殊字符。因此,最佳的做法是写入脚本。另外上述语法若要支持比较完整的bash语法,要用Type=oneshot。
    • ExecStop: 与systemctl stop执行相关,关闭服务。
    • ExecReload: 与systemctl reload执行相关。
    • Restart: 当Restart=1时,此daemon终止后,再次重启。
    • RemainAfterExit: 当RemainAfterExit=1时,此daemon所属的所有程序都终止后,此服务会再尝试重启。此对于Type=oneshot类的服务很有帮助。
    • TimeoutSec: 如果服务在启动或者关闭时,因为某些缘故而无法正常启动或者结束时,该参数表示需要等多久才进入强制结束状态。
    • KillMode: 有3个类型process,control-group,none。
      • process: daemon终止时,只会终止主要程序,即ExecStart后的指令。
      • control-group: daemon终止时,由daemon产生的其它control-group程序也会终止。
      • none: 没有程序会被关闭。
      • RestartSec: 与Restart有关联,即服务在关闭后需要等待多少时间才重启,默认时100ms。

[Install]部分

  • WanteBy: 该unit本身附挂在那个target unit下,因此后面一般取xxx.target,如大多数服务都是附挂在multi-user.target下。
  • Also: unit本身enable时,Also后面的unti也会enable,即依赖性的服务也写在此处。
  • Alias: 链接别名。当systemctl enable服务时,此服务会进行连接文件的创建。如multi-user.target,当作为默认操作环境时,/etc/systemd/system/default.target会链接到/usr/lib/systemd/system/multi-user.target。

标签:Systemd,服务,service,启动,systemd,笔记,system,Linux,unit
From: https://blog.51cto.com/huanghai/9166687

相关文章

  • Internlm-chat-7b大模型笔记1
    首先第一次做作业只对着文档来操作,但是发现出现了很多错误因为每段代码都有先后顺序,而且一些是终端一些是Python的代码然后遇到第二个困难是配置ssh的时候因为算力没有了重新进入开发机,但是密钥发生改变,出现以下报错@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    WARNIN......
  • Linux常用命令分享
    $命令行提示符粗体表示命令斜体表示参数  filename,file1,file2都是文件名。有时文件名有后缀,比如file.zip  command命令名  dir文件夹名  string字符串  username用户名  groupname组名  regex正则表达式  path路径  d......
  • openGauss学习笔记-191 openGauss 数据库运维-常见故障定位案例-出现Error:No space l
    openGauss学习笔记-191openGauss数据库运维-常见故障定位案例-出现Error:Nospaceleftondevice提示191.1出现“Error:Nospaceleftondevice”提示191.1.1问题现象在数据库使用过程中,出现如下错误提示。Error:Nospaceleftondevice191.1.2原因分析磁盘空间不足......
  • elasticsearch使用笔记
    查询POST/GEThttp://192.168.0.1:9200/waf-20*/_search{"query":{"bool":{"must":[{"match":{"src_ip":"192.168.128.190"}},{"range":{&quo......
  • 27个Linux文档编辑命令
    Linuxcol命令Linuxcol命令用于过滤控制字符。在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符">"和">>",把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控制字符。Linuxcolrm命令Linuxcolrm命令用于滤掉指定的行。colrm指令从标......
  • Linux/Oracle-说说我知道的date
    在linux系统中,你可以直接使用命令date查看当前操作系统的时间。例如:--在UOS中,这样显示ywbaoyw@xxx@baoyw-b:~/Desktop$date2024年01月09日星期二11:18:10CSTywbaoyw@xxx@baoyw-b:~/Desktop$--在Linux中,这样显示[root@oracle-baoyw]#dateTueJan911:19:49CTS2024[r......
  • Linux下PCI设备驱动开发详解(八)
    Linux下PCI设备驱动开发详解(八)RIFFA的Linux驱动文件夹下有6个C源码文件,riffa_driver.c、riffa_driver.h、circ_queue.c、circ_queue.h、riffa.c、riffa.h。其中riffa.c和riffa.h不属于驱动源码,它们是系统函数调用驱动封装的一层接口,属于用户态应用程序的一部分。在讲解riffa之前,我......
  • 使用Python的requests库在Linux中进行HTTP通信
    在Linux中,使用Python的requests库进行HTTP通信是一种高效且简洁的方法。requests库为发送HTTP请求提供了丰富的功能,包括GET、POST、PUT、DELETE等常见的HTTP方法,以及处理cookies、会话、参数等高级功能。首先,确保您的Linux系统已经安装了Python和requests库。如果尚未安装,可以使用......
  • 使用bash脚本在Linux中发送HTTP GET请求
    在Linux中,使用bash脚本发送HTTPGET请求是一种常见的自动化任务。下面是一个简单的bash脚本示例,用于发送HTTPGET请求并处理响应:bash复制代码#!/bin/bash#定义URLurl="http://example.com" #发送GET请求并获取响应response=$(curl-s"$url")#检查响应状态码if [$?-eq......
  • 在Linux中设置HTTP代理服务器
    在Linux中设置HTTP代理服务器涉及到几个关键步骤。下面是一个简单的指南,帮助你设置一个基本的HTTP代理服务器:1. 选择代理软件:有许多软件可以用来设置HTTP代理服务器,其中一些流行的选择包括Squid、Privoxy和Polipo。在本指南中,我们将使用Squid作为示例。2. 3. 安装Squid:首先,你需......