Techyou labs
文章RSS
评论RSS
登录
真正的爱应该超越生命的长度,心灵的宽度,灵魂的深度
搜索
关于作者
文章分类
Default
Linux/Unix
Database
Cloud
Networking
Security
Programming
最新文章
带你重走 TiDB TPS 提升 1000 倍的性能优化之旅
Unicode 中的 BIDI 双向性算法[转]
在linux中设置优先使用ipv4,而不是ipv6
linux下WPS高分辨率下因字体缩放导致字体发虚的问题
ssh-rsa not in pubkeyacceptedalgorithms问题解答及处理办法 Permission denied (publickey)
在 Ubuntu 22.04 中使用 PipeWire 替换 PulseAudio
MYSQL简单监控指标
deepin-wine6-stable下TIM悄悄崩溃问题
openwrt 设置ipv6地址分配
Redis 实战篇:巧用数据类型实现亿级数据统计
最新评论
renothing: 备注:路由器端优先设置ipv4并不影响客户端的ip...
renothing: 二次反向代理跟你应用程序得处理时间有关系吧?尤其是...
二次反向代理性能很差,怎么优化的?: 我也用nginx 做了个二次反向代理,但是并发连3...
hostyep: 交换链接么?目前每天保持30个左右对口IP,每月都...
yzhkpli: error while loading share...
美肤宝: 感谢分享。。。
lq: 嗯 喜欢弄得点单点
按月归档
March 2023
December 2022
November 2022
September 2022
August 2022
March 2022
January 2022
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
February 2021
September 2020
May 2020
September 2019
August 2019
July 2019
June 2019
May 2019
January 2019
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
April 2018
March 2018
December 2017
October 2017
September 2017
August 2017
April 2017
March 2017
February 2017
August 2016
July 2015
November 2014
September 2014
August 2014
July 2014
June 2014
July 2013
April 2013
September 2012
July 2012
May 2012
April 2012
February 2012
January 2012
December 2011
November 2011
October 2011
September 2011
August 2011
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
December 2009
November 2009
October 2009
September 2009
August 2009
June 2009
May 2009
April 2009
March 2009
February 2009
December 2008
November 2008
September 2008
August 2008
July 2008
June 2008
常用标签
Mysql
nginx
mysql优化
linux
debian
Powered by
Typecho)))
Optimized by
EAimTY
systemd 和 systemctl 使用简介[上]
August 18, 2018
随着debian默认启用systemd,主流发行版已经全面正式采用systemd来替换原来的sysv init了。Systemd的主要目的就是减少系统引导时间和计算开销。如果你的Linux系统配置为使用Systemd引导程序,它取替传统的SysV init,启动过程将交给systemd处理。Systemd的一个核心功能是它同时支持SysV init的后开机启动脚本。 Systemd引入了并行启动的概念(依赖于dbus),它会为每个需要启动的守护进程建立一个套接字,这些套接字对于使用它们的进程来说是抽象的,这样它们可以允许不同守护进程之间进行交互。Systemd会创建新进程并为每个进程分配一个控制组(cgroup)。处于不同控制组的进程之间可以通过内核来互相通信。systemd处理开机启动进程的方式非常漂亮,和传统基于init的系统比起来优化了太多。让我们看下Systemd的一些核心功能。 Systend的新特性: - 系统引导时实现服务的并行启动; - 按需激活进程; - 系统实现快照; - 基于依赖关系定义服务的控制逻辑; #核心概念:unit unit涵盖了相关的配置文件进行标识、识别和配置;文件中主要包含了系统服务、监听的socket、保存的快照以及其它与init相关的信息;这些配置文件主要保存在: ``` /usr/lib/systemd/system /run/systemd/system /etc/systemd/system ``` systemd的unit配置文件包含很多种类型,我们以后缀名来区分出大体的类型。 unit的常见类型: ``` Service unit: 文件扩展名.service, 用于定义系统服务; Target unit: 文件扩展名.target, 用于模拟实现"运行级别"; Device unit: 文件扩展名.device, 用于定义内核识别的设备; Mount unit: 文件扩展名.mount, 用于定义文件系统的挂载点; Socket unit: 文件扩展名.socket, 用于标识进程间通信用到的socket文件; Snapshot unit: 文件扩展名.snapshot, 用于管理系统快照; Swap unit: 文件扩展名.swap, 用于标识swap设备; Automount unit: 文件扩展名.automount, 用于定义文件系统自动点设备; Path unit: 文件扩展名.path, 用于定义文件系统中的一文件或目录; ``` 对于Linux-3.10以后的内核来讲,即使用户没有挂载任何设备,也会看到以cgroup的设备挂载,这个叫做控制组,来实现内核中的资源分配的一种机制,以Docker,主要依赖的就是cgroup机制以及namespace机制用来实现。 以上就是unit特别常见的类型,那么为了了解systemd的工作方式,接下来我们就简单的描述一下其关键特性: 关键特性: - 基于socket激活机制: 意味着socket与程序是可以进行分离的; - 基于bus的激活机制; - 基于device的激活机制; - 基于path的激活机制; - 系统快照:保存各unit的当前状态信息于持久存储设备中; - 向后兼容SysV init脚本 /etc/init.d/ 当服务启动时,可事先将socket分予给该服务程序,但该服务程序可先暂时并未启动,接下来我们还可以基于总线(bus)进行激活等特性。 不过需要注意的是,systemd也有不兼容的此前较老版本的功能特性。 不兼容特性: - systemctl的命令是固定不变的; - 由非systemd启动的服务,systemctl无法与之通信,意味着systemd无法控制此服务; #systemctl命令 我们使用很多次systemctl命令来管理服务,对于RHEL 7/Ubuntu16.04 以上来说,只要是service以及其它类型的unit的文件,都是由systemd进行管控的,而且还能兼容/etc/init.d/目录下的各个服务脚本,而且对于命令的使用也很好掌握。 service等类型的unit文件; systemctl命令: ``` systemctl - Control the systemd system and service manager systemctl [OPTIONS...] COMMAND [NAME...] ``` 对于该命令来说,拥有着许多的子命令,与原来upstart和sysv init的对比 ``` 启动:service NAME start ==> systemctl start NAME.service 停止:service NAME stop ==> systemctl stop NAME.service 重启:service NAME restart ==> systemctl restart NAME.service 状态:service NAME status ==> systemctl status NAME.service 条件式重启:service NAME condrestart ==> systemctl try-restart NAME.service 重载或重启服务:systemctl reload-or-restart NAME.service 重载或条件式重启服务:systemctl reload-try-restart NAME.service 查看某服务当前激活与否的状态:systemctl is-active NAME.service 查看所有已激活的服务:systemctl list-units --type service 查看所有服务(已激活及未激活): chkconfig --list ==> systemctl list-units -t service --all 查看某服务是否能开机自启:chkconfig --list NAME ==> systemctl is-enable NAME.service 禁止某服务设定为开机自启:systemctl mask NAME.service 取消此禁止:systemctl umask NAME.service 查看服务的依赖关系:systemctl list-dependencies NAME.service ``` 前面写到unit的常见类型,其中target类型就是用于实现其系统启动的运行级别,一共有七个运行级别,从0开始,到6结束,我们介绍一下这七个运行级别。 ``` 0:关机; 1:单用户模式,无网络连接,不运行守护进程,不允许非超级用户登录; 2:多用户模式,无网络连接,不运行守护进程; 3:多用户模式,正常启动系统; 4:用户自定义; 5:多用户模式,图形界面; 6:重启; ``` 对应target如下 ``` 0 ==> runlevel0.target, poweroff.target 1 ==> runlevel1.target, rescue.target 2 ==> runlevel2.target, multi-user.target 3 ==> runlevel3.target, multi-user.target 4 ==> runlevel4.target, multi-user.target 5 ==> runlevel5.target, graphical.target 6 ==> runlevel6.target, reboot.target ``` 对应原来的init 切换方式如下: ``` 切换切换:init N ==> systemctl isolate NAME.target 查看级别:runlevel ==> systemctl list-units --type target 查看所有级别:systemctl list-units -t target -a 获取默认运行级别:systemctl get-default 修改默认运行级别:systemctl get-default NAME.target 切换至紧急救援模式:systemctl rescre 切换至emergency模式:systemctl emergency ``` 以上就是管理常见的target类型的命令,我们还有一些其它常用命令来进行总结。 其它常用命令: ``` 关机:systemctl halt, systemctl poweroff 重启:systemctl reboot 挂起:systemctl suspend 快照:systemctl hibernate 快照并挂起:systemctl hybrid-sleep ``` #systemd unit file 在介绍完systemd以及讲解了systemctl命令之后,我们来了解unit file,以及如何写出unit file。 而unit文件是由描述各其行为及配置指令组成的,其配置文件属于.ini风格,通过各种指令来管理以上的功能。 unit file共有三部分组成, 比如service unit file 一般组成如下 ``` [Unit]: 定义与Unit类型无关的通用选项;用于提供unit的描述信息,unit行为及依赖关系等; [Service]:与特定类型相关的专用选项;此处为Service类型; [Install]:定义由"systemctl enable"及"systemctl disable"命令在实现服务启用或禁用时用到的一些选项; ``` 以上就是unit配置文件的结构,接下来我们说一下这三部分的常用选项。 Unit段的常用选项: ``` Description:描述信息,意义性描述; After:定义unit的启动次序;表示当前unit应晚于哪些unit启动;其功能与Before相反; Requies:依赖到其它的units;强依赖,被依赖的units无法激活时,当前的unit即无法激活; Wants:依赖到其它的units;弱依赖; Confilcts:定义units 的冲突关系; ``` Service段的常用选项: ``` Type:用于定义影响ExecStart及相关参数的功能的unit进程类型; 类型: simple: forking: oneshot: dbus: notify: idle: EnvironmentFile:环境配置文件; ExecStart:指明启动unit要运行的命令或脚本;ExecStart, ExecStartPost ExecStop:指明停止unit要运行的命令或脚本; Restart: ``` Install段的常用配置: Alias: RequiredBy:被哪些unit所依赖; WantBy:被哪些unit所依赖; ** 另外,对于新创建的unit文件以及修改过的unit文件,我们需要使用systemctl来重载其配置文件才能生效!。** ``` # systemctl daemon-reload ``` 相关链接 - [arch 的 systemd 说明页面](https://wiki.archlinux.org/index.php/Systemd "arch 的 systemd 说明页面") - [systemd 的手册页](https://www.freedesktop.org/software/systemd/man/ "systemd 的手册页") - [systemd.unit 中文手册 - 金步国](http://www.jinbuguo.com/systemd/systemd.unit.html "systemd.unit 中文手册 - 金步国") - [systemd Optimizations优化](https://freedesktop.org/wiki/Software/systemd/Optimizations/ "systemd Optimizations优化") - [DBus入门介绍](https://www.jianshu.com/p/c073daaf427f "DBus简介") - [systemd/Timers](https://wiki.archlinux.org/index.php/Systemd/Timers "systemd/Timers") - [systemd攻略](https://www.jianshu.com/p/8b3fba13fcad "systemd攻略") - https://www.linuxidc.com/Linux/2018-11/155443.htm
暂无评论
添加新评论
称呼
Email
网站
取消回复
内容
发表评论