为什么80%的码农都做不了架构师?>>>   

系统资源(unit)分类

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

Target 与传统 runlevel 对应关系

传统运行等级 新版 target 命名 链接名
Runlevel 0 runlevel0.target poweroff.target
Runlevel 1 runlevel1.target rescue.target
Runlevel 2 runlevel2.target multi-user.target
Runlevel 3 runlevel3.target multi-user.target
Runlevel 4 runlevel4.target multi-user.target
Runlevel 5 runlevel5.target graphical.target
Runlevel 6 runlevel6.target reboot.target

systemctl 命令

  • 查看版本

    systemctl --version
    
  • 系统操作
    systemctl reboot # 重启
    systemctl poweroff # 关闭系统,切断电源
    systemctl halt # 停止 CPU 工作
    systemctl suspend # 暂停系统
    systemctl hibernate # 让系统进入休眠状态
    systemctl hybrid-sleep # 让系统进入交互式休眠状态
    systemctl rescue # 启动进入救援状态(单用户状态)
    systemctl status # 显示系统状态
    
  • 查看全部 Unit
    systemctl list-unit-files # 列出所有 Unit 配置文件
    # enabled 已建立启动链接
    # disabled 没建立启动链接
    # static 该配置文件没有[Install]部分,无法执行,只能作为其他 Unit 配置文件的依赖
    # masked 该配置文件被禁止建立启动链接
    systemctl list-unit-files --type=service # 列出指定类型的 Unit 配置文件
    systemctl list-units # 列出正在运行的 Unit
    systemctl list-units --all # 列出所有 Unit,包括没有找到配置文件的或者启动失败的
    systemctl list-units --all --state=inactive # 列出所有没有运行的 Unit
    systemctl list-units --failed # 列出所有加载失败的 Unit
    systemctl list-units --type=service # 列出所有正在运行的、类型为 service 的 Unit
    
  • 查看一个 Unit
    systemctl list-dependencies nginx.service # 显示一个 Unit 的所有依赖
    systemctl list-dependencies --all nginx.service # 显示一个 Unit 的所有依赖,展开 target
    systemctl cat nginx.service # 查看一个 Unit 配置文件
    systemctl show httpd.service # 显示一个 Unit 的所有底层参数
    systemctl show -p CPUShares httpd.service # 显示一个 Unit 的指定属性的值
    systemctl status nginx.service # 显示单个 Unit 的状态
    systemctl -H root@ssh_server status nginx.service # 显示远程主机的某个 Unit 的状态 (ssh 连接)
    systemctl is-active nginx.service # 显示某个 Unit 是否正在运行
    systemctl is-failed nginx.service # 显示某个 Unit 是否处于启动失败状态
    systemctl is-enabled nginx.service # 显示某个 Unit 服务是否建立了启动链接
    
  • 操作一个 Unit
    systemctl reload apache.service # 重新加载一个服务的配置文件
    systemctl set-property httpd.service CPUShares=500 # 设置一个服务的指定属性
    systemctl start apache.service # 立即启动一个服务
    systemctl stop apache.service # 立即停止一个服务
    systemctl restart apache.service # 重启一个服务
    systemctl kill apache.service # 杀死一个服务的所有子进程
    systemctl enable nginx.service # 建立启动链接,激活开机启动
    systemctl disable nginx.service # 删除启动链接,取消开机启动
    
  • 重新加载全部修改过的 Unit 配置文件
    systemctl daemon-reload
    

systemd-analyze 命令

  • 查看启动耗时

    systemd-analyze
    
  • 查看每个服务的启动耗时
    systemd-analyze blame
    
  • 显示瀑布状的启动过程流
    systemd-analyze critical-chain
    
  • 显示指定服务的启动流
    systemd-analyze critical-chain atd.service
    

journalctl 命令

  • 查看所有日志(默认只保存本次启动的日志)

    journalctl
    
  • 查看内核日志(不显示应用日志)
    journalctl -k
    
  • 查看系统启动日志
    journalctl -b # 本次启动的日志
    journalctl -b -0 # 本次启动的日志
    journalctl -b -1 # 查看上一次启动的日志(需更改设置)
    
  • 查看指定时间的日志
    journalctl --since="2012-10-30 18:17:16"
    journalctl --since "20 min ago"
    journalctl --since yesterday
    journalctl --since "2018-11-11" --until "2019-01-01 01:00"
    journalctl --since 09:00 --until "1 hour ago"
    
  • 显示尾部的最新日志
    journalctl -n # 最近 10 行
    journalctl -n 20 # 最近 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
    
  • 查看指定优先级(及其以上级别)的日志,共有8级
    • 0: emerg
    • 1: alert
    • 2: crit
    • 3: err
    • 4: warning
    • 5: notice
    • 6: info
    • 7: debug
    journalctl -p err -b
    
  • 日志默认分页输出,--no-pager 改为正常的标准输出
    journalctl --no-pager
    
  • 以 JSON 格式(单行)输出
    journalctl -b -u nginx.service -o json
    
  • 以 JSON 格式(多行)输出,可读性更好
    journalctl -b -u nginx.serviceqq -o json-pretty
    
  • 显示日志占据的硬盘空间
    journalctl --disk-usage
    
  • 指定日志文件占据的最大空间
    journalctl --vacuum-size=1G
    
  • 指定日志文件保存多久
    journalctl --vacuum-time=1years
    

其他相似命令

  • hostnamectl
  • localectl
  • timedatectl
  • loginctl

Unit 配置文件

[Unit]

  • Description: 简短描述
  • Documentation: 文档地址
  • Requires: 当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
  • Wants: 与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
  • BindsTo: 与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行
  • Before: 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
  • After: 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动
  • Conflicts: 这里指定的 Unit 不能与当前 Unit 同时运行
  • Condition...: 当前 Unit 运行必须满足的条件,否则不会运行
  • Assert...: 当前 Unit 运行必须满足的条件,否则会报启动失败

[Service]

  • WorkingDirectory: 设置进程的工作目录

    • 特殊值 "~" 表示 User= 用户的家目录
    • 设为一个以 RootDirectory= 为基准的绝对路径
      • 例如当 RootDirectory=/sysroot 并且 WorkingDirectory=/work/dir 时,实际的工作目录将是 /sysroot/work/dir
    • 当 systemd 作为系统实例运行时,此选项的默认值是 /
    • 当 systemd 作为用户实例运行时,此选项的默认值是对应用户的家目录
    • 给目录加上 "-" 前缀,表示即使此目录不存在,也不算致命错误
    • 未设置 RootDirectory=/RootImage= 选项,那么为 WorkingDirectory= 设置的绝对路径 将以主机(或容器)的根目录(也就是运行 systemd 的系统根目录)为基准
  • RootDirectory: 设置以 chroot(2) 方式执行进程时的根目录
    • 必须设为一个以主机(或容器)的根目录(也就是运行 systemd 的系统根目录)为基准的绝对路径
    • 设置了此选项,必须确保进程及其辅助文件在 chroot() 监狱中确实可用
  • User/Group: 设置进程在执行时使用的用户与组
  • TimeoutSec: 定义 Systemd 停止当前服务之前等待的秒数
  • Environment: 指定环境变量
  • EnvironmentFile: 环境参数文件,内部 key=value 格式,在当前文件中使用 $key 获取 value
  • ExecStart: 启动时执行的命令
  • ExecReload: 重启服务时执行的命令
  • ExecStop: 停止服务时执行的命令
  • ExecStartPre: 启动服务之前执行的命令
  • ExecStartPost: 启动服务之后执行的命令
  • ExecStopPost: 停止服务之后执行的命令
  • "-" 配置项前的减号"-"表示"抑制错误",发生错误时不影响后续命令执行
  • Type
    • simple: 默认,ExecStart 启动的进程就是主进程
    • forking: ExecStart 启动时 fork 子进程,之后该父进程退出,子进程成为主进程
    • oneshot: 类似 Simple,只执行一次
    • dbus: 类似 Simple,等待 D-Bus 信号启动
    • notify: 类似 Simple,启动完成后发出通知信号
    • idle: 类似 Simple,等到其他任务执行完成后才会启动该服务
  • RemainAfterExit=yes: 进程退出后服务保持运行
  • KillMode
    • control-group: 默认,杀掉所有子进程
    • process: 只杀主进程
    • mixed: 主进程收到 SIGTERM 信号,子进程收到 SIGKILL 信号
    • none: 不杀进程,只执行服务的 stop 命令
  • Restart
    • no: 默认,退出后不重启
    • on-success: 正常退出时重启
    • on-failure: 非正常退出、被信号终止或超时重启
    • on-abnormal: 被信号终止和超时重启
    • on-abort: 收到没有捕捉到的信号终止时重启
    • on-watchdog: 超时退出,才会重启
    • always: 不管是什么退出原因,总是重启
  • RestartSec: 系统重启前等待的秒数

[Install]

  • WantedBy: 它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants 后缀构成的子目录中
  • RequiredBy: 它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required 后缀构成的子目录中
  • Alias: 当前 Unit 可用于启动的别名
  • Also: 当前 Unit 激活(enable)时,会被同时激活的其他 Unit

Unit 配置文件占位符

占位符 作用
%n 完整的 Unit 文件名字,包括 .service 后缀名
%m 实际运行的节点的 Machine ID,适合用来做Etcd路径的一部分,例如 /machines/%m/units
%b 作用有点像 Machine ID,但这个值每次节点重启都会改变,称为 Boot ID
%H 实际运行节点的主机名
%p Unit 文件名中在 @ 符号之前的部分,不包括 @ 符号
%i Unit 文件名中在 @ 符号之后的部分,不包括 @ 符号和 .service 后缀名

转载于:https://my.oschina.net/colben/blog/1823907

Systemd 笔记相关推荐

  1. Telechips TCC803X Systemd 笔记

    一.systemd是什么 首先systmed是一个用户空间的程序,属于应用程序,不属于Linux内核范畴,Linux内核的主要特征在所有发行版中是统一的,厂商可以自由改变的是用户空间的应用程序.Lin ...

  2. blfs(systemd版本)学习笔记-配置远程访问和管理lfs系统

    要实现远程管理和配置lfs系统需要配置以下软件包: 前几页章节脚本的配置:https://www.cnblogs.com/renren-study-notes/p/10390598.html wget ...

  3. systemd wsl 测试笔记

    文章目录 systemd 简介 WSL systemd systemctl journalctl hello service Sleep 与 Timeout 测试 Requires 测试 After ...

  4. 关于 Linux中systemd的一些笔记

    写在前面 嗯,准备RHCA,学习整理这部分知识 博文内容涉及: systemd简述 对于unit的信息的介绍 通过systemctl命令控制Service unit的Demo Service unit ...

  5. Linux Systemd 学习笔记

    systemctl Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面. 查看 Systemd 的版本 systemctl --version 重启系统 sudo systemct ...

  6. blfs(systemd版本)学习笔记-编译安装openssh软件包

    openssh项目地址:http://www.linuxfromscratch.org/blfs/view/stable/postlfs/openssh.html 1.下载openssh包和补丁并校验 ...

  7. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  8. Linux第二周学习笔记(7)

    Linux第二周学习笔记(7) 2.13 文档查看cat_more_less_head_tail (1). cat命令 cat命令:用于查看一个文件的内容并将其显示在屏幕上 cat-A命令:显示所有的 ...

  9. supervisor 守护多个进程_supervisor守护进程管理实操笔记

    2020年年后工作中需开发一支持多数据源自动上报业务数据的程序,程序开发完部署上线时需要对其进程进行自动管理,不然哪天程序down了还不知,可就麻烦了,所以这里选用了强大的supervisor,以下文 ...

最新文章

  1. linux系统编程:自己动手写一个cp命令
  2. poj 1740 A New Stone Game 博弈
  3. 上传Android或Java库到Maven central repository(转载)
  4. python3视频教程-python3入门视频教程
  5. linux arecord 命令,如何使用arecord录音
  6. Merge和Rebase在Git中的区别
  7. 极光推送收费标准_刚刚,安卓统一推送又有进展了!华为率先...
  8. 基于GDAL库,读取海洋风场数据(.nc格式)c++版
  9. c++ 多重背包状态转移方程_Python|动态规划关于0-1背包问题
  10. 乐动体育推荐:9款最佳编程字体
  11. 写一个自己的javascript库
  12. 3.25万颗!真正前装上车的激光雷达供应商有哪几家?
  13. MWORKS来了(一)| 体验焕然一新的智能建模
  14. Cadence 添加图片 LOGO
  15. 接口自动化测试项目实战
  16. 解决idea运行Tomcat项目时网页自动打开test1_Web_exploded文件并且打开其他链接时报错404的问题
  17. 拖延症患者的自我反省
  18. c语言程序延时10s,单片机C语言程序设计:10s 的秒表
  19. 单目ORB-SLAM流程梳理
  20. linux dns区域传送,DNS服务之主从复制和区域传送

热门文章

  1. js 判断字符串是否包含某字符串
  2. vs2003不能正常调试或运行!
  3. 互联网轻量级框架SSM-查缺补漏第二天
  4. m_Orchestrate learning system---十八、mo项目的启示是什么
  5. SPOJ LCS Longest Common Substring
  6. 使用fpm简单制作自定义rpm包
  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(43)-工作流设计-字段分类设计
  8. elk系列7之通过grok分析apache日志
  9. java面试总结-(hibernate ibatis struts2 spring)
  10. 闲来无事 linux cp命令的三种实现方式