Systemd 笔记
为什么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 笔记相关推荐
- Telechips TCC803X Systemd 笔记
一.systemd是什么 首先systmed是一个用户空间的程序,属于应用程序,不属于Linux内核范畴,Linux内核的主要特征在所有发行版中是统一的,厂商可以自由改变的是用户空间的应用程序.Lin ...
- blfs(systemd版本)学习笔记-配置远程访问和管理lfs系统
要实现远程管理和配置lfs系统需要配置以下软件包: 前几页章节脚本的配置:https://www.cnblogs.com/renren-study-notes/p/10390598.html wget ...
- systemd wsl 测试笔记
文章目录 systemd 简介 WSL systemd systemctl journalctl hello service Sleep 与 Timeout 测试 Requires 测试 After ...
- 关于 Linux中systemd的一些笔记
写在前面 嗯,准备RHCA,学习整理这部分知识 博文内容涉及: systemd简述 对于unit的信息的介绍 通过systemctl命令控制Service unit的Demo Service unit ...
- Linux Systemd 学习笔记
systemctl Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面. 查看 Systemd 的版本 systemctl --version 重启系统 sudo systemct ...
- blfs(systemd版本)学习笔记-编译安装openssh软件包
openssh项目地址:http://www.linuxfromscratch.org/blfs/view/stable/postlfs/openssh.html 1.下载openssh包和补丁并校验 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- Linux第二周学习笔记(7)
Linux第二周学习笔记(7) 2.13 文档查看cat_more_less_head_tail (1). cat命令 cat命令:用于查看一个文件的内容并将其显示在屏幕上 cat-A命令:显示所有的 ...
- supervisor 守护多个进程_supervisor守护进程管理实操笔记
2020年年后工作中需开发一支持多数据源自动上报业务数据的程序,程序开发完部署上线时需要对其进程进行自动管理,不然哪天程序down了还不知,可就麻烦了,所以这里选用了强大的supervisor,以下文 ...
最新文章
- linux系统编程:自己动手写一个cp命令
- poj 1740 A New Stone Game 博弈
- 上传Android或Java库到Maven central repository(转载)
- python3视频教程-python3入门视频教程
- linux arecord 命令,如何使用arecord录音
- Merge和Rebase在Git中的区别
- 极光推送收费标准_刚刚,安卓统一推送又有进展了!华为率先...
- 基于GDAL库,读取海洋风场数据(.nc格式)c++版
- c++ 多重背包状态转移方程_Python|动态规划关于0-1背包问题
- 乐动体育推荐:9款最佳编程字体
- 写一个自己的javascript库
- 3.25万颗!真正前装上车的激光雷达供应商有哪几家?
- MWORKS来了(一)| 体验焕然一新的智能建模
- Cadence 添加图片 LOGO
- 接口自动化测试项目实战
- 解决idea运行Tomcat项目时网页自动打开test1_Web_exploded文件并且打开其他链接时报错404的问题
- 拖延症患者的自我反省
- c语言程序延时10s,单片机C语言程序设计:10s 的秒表
- 单目ORB-SLAM流程梳理
- linux dns区域传送,DNS服务之主从复制和区域传送
热门文章
- js 判断字符串是否包含某字符串
- vs2003不能正常调试或运行!
- 互联网轻量级框架SSM-查缺补漏第二天
- m_Orchestrate learning system---十八、mo项目的启示是什么
- SPOJ LCS Longest Common Substring
- 使用fpm简单制作自定义rpm包
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(43)-工作流设计-字段分类设计
- elk系列7之通过grok分析apache日志
- java面试总结-(hibernate ibatis struts2 spring)
- 闲来无事 linux cp命令的三种实现方式