Linux 启动流程及相关知识

Linux 启动流程及相关知识 - 背对背依靠 - 博客园 (cnblogs.com)icon-default.png?t=MBR7https://www.cnblogs.com/heyongshen/p/16514738.html

systemd服务

从CentOS7开始,就使用systemd服务代替init作为系统启动的第一个进程。

systemd的特性:

  • 服务并行启动

  • 可以按照需要启动对应守护进行

  • 自动管理服务的依赖关系

  • Unit(单元)的概念

  • 使用systemctl管理工具

systemd的核心概念Unit(单元)

systemd把服务都笼统称为Unit(单元),通过配置文件进行标识和配置。

Unit存放的位置:/lib/systemd/system

systemd的Unit类型:
(1)service:类似于Centos6里面的服务脚本。文件扩招名为.service

(2)target:类似于Centos6里面的运行级别。文件扩展名为.target

(3)socket:义进程间通信用的socket文件。文件扩展名为.socket

#socket的理解
socket翻译过来是套接字,原意为插座、插孔。

socket可以理解为:ip地址+端口+协议类型

例如:一台笔记本电脑(server),一个耳机(client),一个u盘(clinet),一个鼠标(client),
	socket就可以想象成笔记本电脑上的usb接口、音频接口。
	耳机需要连接到电脑听歌,需要用到音频接口,u盘需要链接电脑拷贝资料,需要用到usb接口。
	socket就负责帮助这些外接设备找到笔记本电脑中相对应的驱动以便他们完成自己的工作,反之也是这样。

socket就是位于两个层面(传输层和应用层)中间的一个参与者,服务于两方。

http是应用层协议,解决如何包装数据,TCP/IP协议是传输层协议,主要解决数据怎么在网络中传输。

一个网络协议 + 一个ip + 一个端口号,就组成了一个socket
原文链接:https://blog.csdn.net/EJEEMT/article/details/90212312

Unit的配置文件

/usr/lib/systemd/system #每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/

/lib/systemd/system #ubutun的对应目录

/run/systemd/system #系统执行过程中所产生的服务脚本,比上面目录优先运行

/etc/systemd/system #管理员建立的执行脚本,类似于/etc/rcN.d/Sxx的功能,比上面目录优先运行

#/etc/systemd/system:系统管理员和用户使用
#/usr/lib/systemd/system:发行版打包者使用

systemd的service

service这种unit类型的Unit文件格式

由三部分组成:

  • Unit:定义的是这个单元的相关信息

  • Service:定义的是这个服务的相关信息

  • Install:定义的是服务启动和关闭的一些选项

Unit段的常用选项

Description:unit的描述信息

After:当前unit在那些unit后面启动,其功能与Before相反

Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活

Wants:依赖到的其它units,弱依赖

Conflicts:定义units间的冲突关系

Service段常用选项

Type:定义启动类型

EnvironmentFile:环境配置文件

simple:默认值,后台启动常驻于内存

ExecStart:启动unit要运行命令或脚本的绝对路径

ExecStartPre: ExecStart前运行

ExecStartPost: ExecStart后运行

ExecStop:停止unit要运行的命令或脚本

Restart:当设定Restart=1 时,服务意外终止会再次自动启动

RestartSec: 重启等待时间,默认100ms

PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录

Install段常用选项

Alias:别名,可使用systemctl command Alias.service

RequiredBy:被哪些units所依赖,强依赖

WantedBy:被哪些units所依赖,弱依赖

Also:安装本服务的时候还要安装别的相关服务

daemon-reload

当创建或者更改了硬盘上的unit的相关文件以后,需要使用daemon-reload加载到系统的内存中才会生效。

或者重启系统也能生效

范例: 自定义service的unit文件

[root@centos8 ~]#vim /lib/systemd/system/hello.service 
[Unit] 
Description=Hello World 

[Service] 
TimeoutStartSec=0
ExecStart=/bin/sh -c "while true; do echo Hello World; sleep 1; done"
ExecStop=/bin/kill sh

[Install] 
WantedBy=multi-user.target

#会在后台持续输出 hello word,写入到了系统日志中/var/log/meseage
#ubuntu的日志文件是: /var/log/sys.log

systemd的target

运行级别:不同的运行级别是不同的服务组合而来的结果。
systemd的target就类似于CentOS6的runlevel

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#graphical.target是基于multi-user.target来的
6  ==> runlevel6.target-> reboot.target #

systemd的管理工具

systemctl是systemd单元(unit)的管理工具

格式:systemctl COMMAND unit_name

start|stop|restart|status

mask:禁用服务

umask:取消禁用的服务

enable:设置开机启动

disable:取消开机启动

is-active:查看unit是否激活

is-enable:查看unit是否开机启动

list-units:查看所有的unit

范例

启动一个服务:
systemctl start unit_name.service #后缀可以省略不屑

设置服务开机重启并立马启动:
systemctl enable unit_name.service --now

查看系统中类型为service的unit
systemctl list-unit --type service --all

service服务的状态

loaded Unit配置文件已处理

active(running) 一次或多次持续处理的运行

active(exited) 成功完成一次性的配置

active(waiting) 运行中,等待一个事件

inactive 不运行

enabled 开机启动

disabled 开机不启动

static 开机不启动,但可被另一个启用的服务激活

indirect 重定向到别处

修改运行级别

  • 通过命令的方式修改

  • 通过开机启动的时候修改

#通过systemctl命令切换运行模式:
systemctl isolate name.target #效果等同于:init X

#开机的时候指定内核模式:只影响当次的启动
启动时,到启动菜单,按e键,找到在linux 开头的行后添加systemd.unit=desired.target 
#centos7是linux16开头

例如:systemd.unit=emergency.target 
systemd.unit=rescue.target
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值