首页 > 其他分享 >systemctl命令介绍和使用

systemctl命令介绍和使用

时间:2025-01-22 10:09:30浏览次数:1  
标签:service 介绍 命令 systemctl journalctl test 日志 Unit

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 1
 date=`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 log
   Loaded: 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 ago
   Control: 9295 (test.sh)
   CGroup: /system.slice/test-sh.service
       ├─9295 /bin/bash /opt/dev/shell/test.sh
       └─9343 sleep 1

Jun 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 log
   Loaded: 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 ago
  Process: 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 服务的日志。

标签:service,介绍,命令,systemctl,journalctl,test,日志,Unit
From: https://www.cnblogs.com/linhaostudy/p/18685151

相关文章

  • GPU介绍之GPU监控中,如何确定GPU忙碌程度
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • 十大漏洞-sql注入漏洞介绍
    前言在网络安全的复杂体系中,SQL注入漏洞是最为常见且危害巨大的漏洞之一。它犹如隐藏在暗处的窃贼,悄无声息地窃取、篡改甚至破坏数据库中的关键信息,对个人、企业乃至整个网络生态都可能造成严重影响。本文将深入探讨SQL注入漏洞定义SQL注入漏洞是攻击者通过在目标应用程......
  • 77命令行解析getopt库
     importgetoptimportsysr"""getopt.getopt(sys.argv[1:],"hf:",["help","file="])sys.argv[1:]:这是要解析的命令行参数列表。sys.argv是一个包含命令行参数的列表,其中sys.argv[0]是脚本名称,sys.argv[1:]则是脚本后面的所有参数。例如,如果命令行输入是script.py......
  • 关于双塔模型的简单介绍
            双塔模型是一种常用于推荐系统和信息检索等领域的深度学习架构,其核心思想是将用户和物品分别映射到不同的向量空间,通过计算两个向量的相似度来预测用户对物品的偏好或相关性。1.python示例 使用python语言来简单示例一下实现过程如下:importtensorflowas......
  • 详细介绍:使用 Axios 提交用户注册数据
    目录完整代码:1.项目背景和功能概述2.HTML结构解析3.JavaScript部分解析3.1事件监听和请求发送3.2请求成功与失败4.完整流程5.总结6.适用场景关键词:本案例展示了如何使用Axios发送POST请求,并提交用户注册所需的用户名和密码数据,完成用户注册操作......
  • ELK介绍
    ELK是由三个开源项目组成的日志管理解决方案,分别是Elasticsearch、Logstash和Kibana。这三个工具协同工作,提供强大的日志收集、处理、存储和可视化能力。通常,ELK被用于大规模的日志分析和数据监控,帮助开发人员和运维团队快速发现问题、进行故障排查和性能优化。1.Elasti......
  • 鸿蒙HarmonyOS开发:自适应布局的介绍,使用场景、实现方式与示例解析
    文章目录一、布局简介二、自适应拉伸1、左右拉伸2、均分拉伸三、自适应缩放1、完整缩放2、占比缩放四、自适应延伸1、同功能内容延伸2、不同功能内容延伸或隐藏五、自适应折行一、布局简介自适应布局是通过设定元素与外部容器的相对关系实现的。当外部容器大小......
  • 关于Web开发中vue的介绍以及发送异步请求的学习
    昨天,我再一次打开了黑马程序员中的Web开发教程,对于之前学习遗漏的进行了补充,了解了Vue其实是一个简化之后的JavaScript框架,主要利用了MVVM模型,在使用时需要引用Vue.js文件newVue({el:'#app',data:{message:'HelloVue!'}});在以上简单代码中,如果message中的数据发生变......
  • telnet命令command not found的解决方法
    安装telnet服务安装telnet命令的方法123yumlisttelnet*             列出telnet相关的安装包yuminstalltelnet-server    安装telnet服务yuminstalltelnet.*         安装telnet客户端 12345678......
  • Windows 常用命令
    Windows命令行(cmd.exe)和PowerShell命令详解本文档旨在介绍Windows命令行(cmd.exe)和PowerShell中常用的和不常用的命令,并着重强调它们在64位Windows系统下的使用,以及与电源管理相关的命令。一、核心概念:cmd.exe和PowerShellcmd.exe(命令提示符):传统的Wi......