systemctl命令介绍和使用

news/2025/1/22 10:08:37/文章来源:https://www.cnblogs.com/linhaostudy/p/18685151

Systemd程序

Systemd其实是Linux系统用来管理系统的一个程序,用来代替原来的init进程(用来管理启动系统其它的服务进程),现在很多Linux发行版都已经自带Systemd程序了。

systemctl命令

1. Unit

systemctl命令是Systemd中最重要的一个命令,用于对服务进行启动,停止等操作,在Systemd中有Unit的概念,每个进程都是一个Unit,总共有十二种Unit类型。

  • Service unit,系统服务
  • Target unit,多个 Unit 构成的一个组
  • Device Unit,硬件设备
  • Mount Unit,文件系统的挂载点
  • Automount Unit,自动挂载点
  • Path Unit,文件或路径
  • Scope Unit,不是由 Systemd 启动的外部进程
  • Slice Unit,进程组
  • Snapshot Unit,Systemd 快照,可以切回某个快照
  • Socket Unit,进程间通信的 socket
  • Swap Unit,swap 文件
  • Timer Unit,定时器

2. 常用命令

# 列出正在运行的Unit
systemctl list-units,可以直接使用systemctl# 列出所有Unit,包括没有找到配置文件的或者启动失败的
systemctl list-units --all# 列出所有没有运行的 Unit
systemctl list-units --all --state=inactive# 列出所有加载失败的 Unit
systemctl list-units --failed# 列出所有正在运行的、类型为service的Unit
systemctl list-units --type=service# 显示某个 Unit 是否正在运行
systemctl is-active application.service# 显示某个 Unit 是否处于启动失败状态
systemctl is-failed application.service# 显示某个 Unit 的依赖
systemctl list-dependencies application.service# 显示某个 Unit 服务是否建立了启动链接
systemctl is-enabled application.service# 立即启动一个服务
sudo systemctl start apache.service# 立即停止一个服务
sudo systemctl stop apache.service# 重启一个服务
sudo systemctl restart apache.service# 重新加载一个服务的配置文件
sudo systemctl reload apache.service# 重载所有修改过的配置文件
sudo systemctl daemon-reload# 启用服务开机自启
systemctl enable apache.service# 禁用服务开机自启
systemctl disable apache.service

systemctl中Unit的配置文件

上面说了每个服务都是一个Unit,那每个Unit都会有它的配置文件,这样启动的时候才知道要按照什么方式去启动。Systemd默认从目录/etc/systemd/system/读取配置文件。但是里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。

1. 查看Unit的配置文件

[root@VM_0_11_centos ~]# systemctl cat mysqld
# /usr/lib/systemd/system/mysqld.service[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target[Install]
WantedBy=multi-user.target[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/var/run/mysqld/mysqld.pid
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Needed to create system tables
ExecStartPre=/usr/bin/mysqld_pre_systemd
# Start main service
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false

2. Unit配置文件的含义

可以看到Unit配置文件有很多标签,不同的标签都代表了不同的意思,这里只列出部分介绍,可以去官网查看Unit配置文件文档介绍,https://www.freedesktop.org/software/systemd/man/systemd.unit.html。- Unit- Description,服务的描述- Documentation,文档介绍- After,该服务要在什么服务启动之后启动,比如Mysql需要在network和syslog启动之后再启动
- Install- WantedBy,值是一个或多个Target,当前Unit激活时(enable)符号链接会放入/etc/systemd/system目录下面以Target名+.wants后缀构成的子目录中- RequiredBy,它的值是一个或多个Target,当前Unit激活(enable)时,符号链接会放入/etc/systemd/system目录下面以Target名+.required后缀构成的子目录中- Alias,当前Unit可用于启动的别名- Also,当前Unit激活(enable)时,会被同时激活的其他Unit
- Service- Type,定义启动时的进程行为。它有以下几种值。- Type=simple,默认值,执行ExecStart指定的命令,启动主进程- Type=forking,以 fork 方式从父进程创建子进程,创建后父进程会立即退出- Type=oneshot,一次性进程,Systemd 会等当前服务退出,再继续往下执行- Type=dbus,当前服务通过D-Bus启动- Type=notify,当前服务启动完毕,会通知Systemd,再继续往下执行- Type=idle,若有其他任务执行完毕,当前服务才会运行- ExecStart,启动当前服务的命令- ExecStartPre,启动当前服务之前执行的命令- ExecStartPost,启动当前服务之后执行的命令- ExecReload,重启当前服务时执行的命令- ExecStop,停止当前服务时执行的命令- ExecStopPost,停止当其服务之后执行的命令- RestartSec,自动重启当前服务间隔的秒数- Restart,定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog- TimeoutSec,定义 Systemd 停止当前服务之前等待的秒数- Environment,指定环境变量

自定义服务启动

既然Systemd的作用就是控制服务的启动,那么就可以把自己的服务添加进去,就可以直接使用systemctl命令来控制服务的启动,或者是设置开机自动启动等等。

1. 创建Unit配置文件

# /usr/lib/systemd/system/test-sh.service
[Unit]
Description= test sh log[Service]
ExecStart=/opt/dev/shell/test.sh
Type=forking
KillMode=process
Restart=on-failure
RestartSec=30s[Install]
WantedBy=multi-user.target

2. 创建脚本

#!/bin/bash
while true
do
sleep 1date=`date -d today +"%Y-%m-%d %T"`echo ${date} >> /opt/dev/shell/test.txt
done

3. 载入配置文件并启动

[root@VM_0_11_centos ~]# systemctl start test-sh.service
^C
[root@VM_0_11_centos ~]# systemctl status test-sh.service
● test-sh.service - test sh logLoaded: loaded (/usr/lib/systemd/system/test-sh.service; enabled; vendor preset: disabled)Active: activating (start) since Fri 2020-06-26 05:46:45 CST; 11s agoControl: 9295 (test.sh)CGroup: /system.slice/test-sh.service├─9295 /bin/bash /opt/dev/shell/test.sh└─9343 sleep 1Jun 26 05:46:45 VM_0_11_centos systemd[1]: Starting test sh log...
[root@VM_0_11_centos ~]# systemctl stop test-sh.service
[root@VM_0_11_centos ~]# systemctl status test-sh.service
● test-sh.service - test sh logLoaded: loaded (/usr/lib/systemd/system/test-sh.service; enabled; vendor preset: disabled)Active: inactive (dead) since Fri 2020-06-26 05:47:52 CST; 2s agoProcess: 9295 ExecStart=/opt/dev/shell/test.sh (code=killed, signal=TERM)Jun 26 05:46:45 VM_0_11_centos systemd[1]: Starting test sh log...
Jun 26 05:47:52 VM_0_11_centos systemd[1]: Stopped test sh log.

查看Unit启动日志

Systemd统一管理了所有Unit的启动日志,因此只需要使用journalctl命令就可以查看到服务的日志

# 查看所有日志(默认情况下 ,只保存本次启动的日志)
journalctl# 查看指定时间的日志
journalctl --since="2012-10-30 18:17:16"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2015-01-10" --until "2015-01-11 03:00"
journalctl --since 09:00 --until "1 hour ago"# 显示尾部的最新10行日志
journalctl -n# 显示尾部指定行数的日志
journalctl -n 20# 实时滚动显示最新日志
journalctl -f# 查看指定服务的日志
journalctl /usr/lib/systemd/systemd# 查看指定进程的日志
journalctl _PID=1# 查看某个路径的脚本的日志
journalctl /usr/bin/bash# 查看指定用户的日志
journalctl _UID=33 --since today# 查看某个 Unit 的日志
journalctl -u nginx.service
journalctl -u nginx.service --since today# 实时滚动显示某个 Unit 的最新日志
journalctl -u nginx.service -f# 合并显示多个 Unit 的日志
$ journalctl -u nginx.service -u php-fpm.service --since today

查看日志:

要使用 journalctl 查看 xxx 服务从开机启动到现在的日志,可以按照以下步骤操作:

  1. 查看服务日志
    使用以下命令查看 xxx 服务的日志:

    sudo journalctl -u xxx.service
    
  2. 限制日志范围为本次启动
    如果只想查看本次启动以来的日志,可以添加 -b 选项:

    sudo journalctl -u xxx.service -b
    
  3. 查看实时日志
    若要实时跟踪日志输出,可以加上 -f 选项:

    sudo journalctl -u xxx.service -f
    
  4. 自定义时间范围
    如果需要查看从某个特定时间点开始的日志,可以使用 --since 选项:

    sudo journalctl -u xxx.service --since "2023-10-01 00:00:00"
    
  5. 导出日志
    若需将日志导出到文件,可以使用重定向:

    sudo journalctl -u xxx.service > sscrpcd_log.txt
    

通过这些命令,你可以查看和管理 sscrpcd 服务的日志。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞驰云联连续4年入选“江苏省软件企业核心竞争力企业”!

近日,2024中国(南京)软件产业博览会开幕式暨第六届江苏软件产业发展大会”在南京成功召开。省工信厅、长三角地区省市产业主管部门负责人、省内各市工信部门负责人,省人工智能学会、江苏软件产业人才发展基金会、省内各市软协相关负责人,以及省软协七届理事会成员、省内重…

《安富莱嵌入式周报》第349期:VSCode正式支持Matlab调试,DIY录音室级麦克风,开源流体吊坠,物联网在军工领域的应用,Unicode字符压缩解压

周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV1PrwmeMEm2/目录: 1、VSCode正式支持Matlab调试 2、DIY录音室级麦克风,20美元成本实现500美元产品效果 3、开源流…

Ai 2024 Mac矢量图形设计

Ai 2024 Mac矢量图形设计 Adobe illustrator,也被称为“AI”,是一种应用于出版、多媒体和在线图像的工业标准矢量插画的软,具有直观的界面和强大的功能。它可以帮助用户轻松创建高质量的矢量图形和排版设计,包括标志、图标、插图、包装设计等。同时,Ai 2024支持导入和导出…

犀牛Rhino 3D建模

犀牛Rhino 3D建模 Rhino 8是一款功能强大的三维构建软件,它可以帮助用户创建各种类型的3D模型,包括产品设计、建筑设计、工业设计计划等。具有直观的界面和丰富的工具库,让你可以快速轻松地进行建模、编辑、分析和漂染。支持多种文件格式的导入和导出,包括STL、STEP、IGES等…

zlibrary入口网站/最新官方国内可用地址/镜像网址

Z-Library(简称Z-Lib)是全球最大的免费在线图书馆,分享各种电子书的下载。无论是各类电子书,还是期刊文章都可以在上面免费的获取,绝对称得上是「海量」书籍和文献。用户可在上面下载期刊、文章以及各类书籍,其共收录了超过 1000w 本书籍和 8000w 篇文章。因为版权问题,…

【推荐】一款前后端分离的开源免费ERP进销存管理系统

项目介绍 盒木ERP社区版是一款开源的ERP进销存管理系统,采用前后端分离的设计架构。系统支持PDA移动端扫码操作,方便仓库管理和库存盘点。 ERP系统作用 ERP系统在企业中的作用是多方面的,它不仅能够提高企业的运营效率和管理水平,还能够帮助企业降低成本、提高客户满意度和…

4. 使用sql查询excel内容

1. 简介 我们在前面的文章中提到了calcite支持csv和json文件的数据源适配, 其实就是将文件解析成表然后以文件夹为schema, 然后将生成的schema注册到RootSehema(RootSchema是所有数据源schema的parent,多个不同数据源schema可以挂在同一个RootSchema下)下, 最终使用calcite的特…

【前端开发】HTML、CSS快速入门

HTML介绍 HTML 是用来描述网页的一种语言,即:超文本标记语言:(HyperText Markup Language) 超文本标记语言(HTML)是构建和呈现网页内容的标准标记语言。 HTML起源与发展 HTML的最初版本非常简单,只能创建静态文档,内容无法交互。随着时间的推移,HTML逐渐融入更多的技术…

VMware VeloCloud SD-WAN 6.2 发布 - 领先的 SD-WAN 解决方案

VMware VeloCloud SD-WAN 6.2 发布 - 领先的 SD-WAN 解决方案VMware VeloCloud SD-WAN 6.2 发布 - 领先的 SD-WAN 解决方案 VMware VeloCloud SD-WAN, Software-Defined WAN 请访问原文链接:https://sysin.org/blog/vmware-sd-wan-6/ 查看最新版。原创作品,转载请保留出处。 …

VSCode设置python文件模板,自动添加文件头注释

1.背景 每次写python代码的时候,都要手动在文件开头加上python解释器路径,文件编码,作者,日期等一堆信息,感觉非常麻烦。作为一个程序员,要学会偷懒。2.环境信息 Windows10 64位操作系统 VSCode 1.96.4 3.如何设置代码模板 避免每次新建项目文件时添加注释文件名、作者、…

解密prompt系列47. O1 Long Thought的一些特征分析

O1之后,思维链的一个简单但之前都没进入视野的特征引起了大家的注意,那就是思考的长度对推理效果的影响,更准确来说是通过哪些思考步骤来有效延长思维长度对推理的影响。这一章我们着重讨论思考长度之前我们花很多章讨论过思维链,包括思维链的组织结构,例如Self-Consisten…