Linux 启动流程及相关知识 - 背对背依靠 - 博客园 (cnblogs.com)
https://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.youkuaiyun.com/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
489

被折叠的 条评论
为什么被折叠?



