博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
systemd
阅读量:5983 次
发布时间:2019-06-20

本文共 6823 字,大约阅读时间需要 22 分钟。

一、systemd的由来与特性

1、历史由来   从CentOS 7系列开始,redhat正式将systemd用于系统管理,来取代CentOS 5的sysV init和CentOS 6的upstart体系;较之之前,systemd为linux系统提供了启动与管理的一整套解决方案;下图为systemd框架图,见图可知,功能甚为强大。

systemd


2、systemd的新特性    1.   系统启动时服务并行启动;    2.   按需激活进程,节约资源;    3.   系统快照功能,下次启动时可恢复至某一次快照时状态;    4.   基于依赖关系定义服务控制逻辑;

二、system的unit

1、何为unit    unit是对配置文件进行标识和配置:文件中主要包含了系统服务,监听socket,保存的系统快照以及其他与init相关的信息2、unit在系统中的路径            软件包安装的系统单元:/usr/lib/systemd/system            运行时配置的系统单元:/run/systemd/system            本地配置的系统单元:/etc/systemd/system3、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    Timer unit:用于管理计划任务,文件扩展名为.timer    Slice unit:用于资源管理,文件扩展名为.slice    Scope unit:用于外部创建的进程,文件扩展名为.scope4、各unit取代的传统服务/etc/rc.d/init.d/ --> service unitinit LEVEL --> target unit/etc/fstab --> mount unitautofs service --> automount unitatd,crond --> timer unit**5、unit的配置文件    5.1、概述     systemd在管理unit时,会默认从本地配置/etc/systemd/system目录中读取配置文件;但是,本地配置目录中的大多数配置文件都是链接/usr/lib/systemd/system中的文件。    ln -s /usr/lib/systemd/system/name.service /etc/systemd/system/name.service实现的就是上面的过程;    其等同于:systemctl enable name.service,激活开机启动    反之:systemctl disable name.service 关闭开机启动    5.2、配置文件        修改配置文件,可以直接 vim /usr/lib/systemd/system/name.service修改;        查看配置文件,systemctl cat name.service                #/usr/lib/systemd/system/sshd.service                [Unit]                Description=OpenSSH server daemon                Documentation=man:sshd(8) man:sshd_config(5)                After=network.target sshd-keygen.service                Wants=sshd-keygen.service                [Service]                Type=notify                EnvironmentFile=/etc/sysconfig/sshd                ExecStart=/usr/sbin/sshd -D $OPTIONS                ExecReload=/bin/kill -HUP $MAINPID                KillMode=process                Restart=on-failure                RestartSec=42s                [Install]                WantedBy=multi-user.target5.3、配置文件区块        [unit]  定义unit的元数据以及与其他unit之间的关系                Description:简短描述                Documentation:man文档地址                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] service 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:指定环境变量        [install] 定义如何启动,以及是否开机启动                WantedBy:可以是一个或多个Target,当前unit enable时,符号链接会放入/etc/systemd/system/TARGET.wants目录下                RequiredBy:可以是一个或多个Target,当前unit enable时,符号链接会放入/etc/systemd/system/TARGET.requires目录下                Alias:别名                Also:当前 Unit  enable 时,会被同时激活的其他 Unit

三、 systemd的关键特性

1、基于socket的激活机制    systemd为支持此机制的服务监听socket,当有客户端与socket通信时,由systemd激活服务,应答客户端的请求;这种机制类似于守护进程。    2、基于bus的激活机制      基于总线的激活    3、基于device的激活机制      当有设备接入时,systemd会自动激活device、mount、automount等unit来识别,挂载接入的设备    4、基于path的激活机制      当某个文件路径变得可用时或路径出现相应文件时,激活对应服务    5、系统快照机制      保存各unit的当前状态信息到持久存储中,在下次开机时可恢复之前某次快照时的系统状态,必要时可自动载入    6、向后兼容        兼容CentOS 5的sysV init以及CentOS 6的upstart机制,也就是说可以继续将服务管理脚本放入/etc/rc.d/init.d目录中管理

四、systemd与sysV init 以及upstart不兼容之处

1、/etc/rc.d/init.d目录中的服务管理脚本不可以用systemctl命令来管理,systemctl命令的参数已经固定    2、/etc/rc.d/init.d目录中的服务管理脚本启动的服务,与systemd管理启动的进程之间无法通信    3、systemd虽然模拟出run level,但是与init、upstart机制的运行级别不完全一致

五、Service unit

1、系统服务新老机制对应        启动:service name start ==> systemctl start name.service        停止:service name stop ==> systemctl stop name.service        重启:service name restart ==> systemctl restart name.service        状态:service name startus ==> systemctl startus name.service        条件式重启:service name condrestart ==> systemctl try-restart name.service        重载或重启服务:systemctl reload-or-restart name.service        重载或条件式重启服务:systemctl reload-or-try-restart name.service        禁止设定为开机自启:systemctl mask name.service        取消禁止设定为开机自启:systemctl unmask name.service        查看某服务当前激活与否的状态:systemctl is-active name.service        查看所有已经激活的服务:systemctl list-units --type service        查看所有服务:systemctl list-units --type service --all    2、chkconfig命令的对应关系            设定某服务开机自启:chkconfig name on ==> systemctl enable name.service            禁止:chkconfig name off ==> systemctl disable name.service            查看所有服务的开机自启状态:chkconfig --list ==> systemctl list-unit-file --type service            查看服务是否开机自启:systemctl is-enable name.service            查看服务的依赖关系:systemctl list-dependencies name.service

六、target unit

1、运行级别:            0 ==>   runlevel0.target,poweoff.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    2、级别切换:init N ==> systemctl isolate name.target    3、查看级别:runlevel ==> systemctl list-units --type target    4、获取默认运行级别:/etc/initab ==> systemctl get-default    5、修改默认级别:/etc/initab ==> systemctl set-default name.target    6、切换至紧急救援模式:systemctl rescue    7、切换至emergency模式:systemctl emergency

七、其他常用命令

1、系统开关机及快照        关机:systemctl halt,systemctl poweroff        重启:systemctl reboot        挂起:systemctl suspend        快照:systemctl hibernate        快照并挂起:systemctl hybrid-sleep        关闭进程:systemctl kill    2、主机名        更改主机名:hostnamectl set-hostname iie-test        查看主机名:hostnamectl status

转载于:https://blog.51cto.com/jiayimeng/2051568

你可能感兴趣的文章
网络爬虫基本原理(一)
查看>>
java json-lib配置
查看>>
网络编程 -- RPC实现原理 -- Netty -- 迭代版本V2 -- 对象传输
查看>>
P3818 小A和uim之大逃离 II
查看>>
C++链表冒泡,归并,插入排序(纯指针)
查看>>
Bootstrap进度条
查看>>
mybatis--面向接口编程
查看>>
angular学习笔记(三十)-指令(4)-transclude
查看>>
NSURLSession
查看>>
c语言函数---I
查看>>
单例模式之懒汉式
查看>>
微服务网关解决方案调研和使用总结 专题
查看>>
C语言指针解说
查看>>
Android抓包方法(一) 之Fiddler代理
查看>>
Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏
查看>>
SQL Server中SET QUOTED_IDENTIFIER的使用
查看>>
Hibernate持久化对象的状态
查看>>
【阿里云API】 阿里云API调用的若干说明
查看>>
14.2 事务的ACID属性
查看>>
Jenkins: 配置信息变更历史
查看>>