系统启动和服务器进程由systemd系统和服务管理器进行管理。此程序提供了一种方式,可以在启动时和运行中的系统上激活系统资源,服务器守护进程和其他进程。
守护进程是在执行各种任务的后台等待或运行的进程,为了侦听连接,守护进程使用套接字,套接字可以由守护进程创建,或者与守护进程分离,并且可能由另一个进程创建(systemd),随后在客户端建立连接时将套接字传递到守护进程。
服务通常指的是一个或多个守护进程,但启动或停止一项服务可能会对系统的状态进行一次性更改(如配置网络接口),不会留下守护进程之后继续运行
补充:守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。
一如既往,linux和UNIX系统的进程iID 1 属于init进程。此进程负责激活系统上的其他服务。常用的守护进程在系统启动时通常System V和linux Standard Base(LSB)init脚本启动。较不常用的守护进程由其他服务根据需要启动,如initd或xinetd。这些系统存在诸多限制,但systemd可以解决
在Red Hat Enterprise Linux7中,进程ID 1 属于systemd这一新的init系统,以下是systemd提供的几项新功能:
·并行化功能,它可提高系统的启动速度
·按需启动守护进程,而不需要单独的服务
·自动服务依赖关系管理可以防止长时间超过,例如在网络不可用时不启动网络服务
·利用linux控制组一起追踪相关进程的方式
注意:
有了systemd,基于shell的服务脚本仅用于几个传统服务,因此,带有shell变量的配置文件将被取代,如/etc/sysconfing中可找到的配置文件,仍在使用中的配置文件作为systemd环境文件被纳入,并作为NAME=VALUE对进行读取。它们不再以shell脚本的形式提供
systemctl和systemd单元:
systemctl命令用于管理各种类型的systemd对象,它们称为单元,可以通过systemctl -t help命令显示可用单元类型的列表。
重要:
systemctl可以缩写或“省略”单元名称,进程数条目和单元说明,除非运行时带有-l选项
下面列出了一些常用的单元类型:
·服务单元具有 .service扩展名,代表系统服务,这种单元用于启动经常访问的守护进程,如web服务器。
·套接字单元具有 .socket扩展名,代表进程间通信(IPC)套接字,套接字的控制可以在建立客户端连接时传递到守护进程或新启动的服务,套接字单元用于延迟系统启动时的服务启动,或者按需启动不常使用的服务,这原则上类似于使用xinetd超级服务器按需启动的服务
·路径单元具有 .path扩展名,用于将服务的激活推迟到特定文件系统更改发生之后,这通常用于使用假脱机目录的服务,如打印系统
备注补充:
·假脱机即SPOOLing。SPOOLing技术是低速输入输出设备与主机交换的一种技术,通常也称为“假脱机真联机”,他的核心思想是以联机的方式得到脱机的效果。
·虚拟性是OS的四大特性之一。如果说可以通过多道程序技术将一台物理CPU虚拟为多台逻辑CPU,从而允许多个用户共享一台主机,那么,通过SPOOling技术便可将一台物理I/O设备虚拟为多台逻辑I/O设备,同样允许多个用户共享一台物理I/O设备。
·简单的讲,假脱机文件是一个在打印时用于在硬盘上存储打印文稿的临时文件。当您从一个应用软件打印文稿时,Windows系统会在硬盘中建立一个假脱机文件,并将打印的文件用一种特殊的增强图元格式复制到这个文件中。当这个假脱机文件创建完毕,Windows系统就将控制权交给您使用的应用软件,然后,这个假脱机文件将在后台被送往打印机,这样,您的文稿就被打印出来了
服务状态:
可以通过systemctl status name.typee查看服务的状态,如果未提供单元类型,则systemctl将显示服务单元的状态,存在的前提
状态输出中可以找到表示服务状态的几个关键字:
关键字 | 描述 |
---|---|
loaded | 单元配置文件已处理 |
active(running) | 正在通过一个或多个持续进程运行 |
active(exited) | 已成功完成一次性配置 |
active(waiting) | 运行中,但正在等待事件 |
inactive | 不在运行 |
enabled | 将在系统启动时启动 |
disabled | 不会在系统启动时启动 |
static | 无法启用,但可以由某一启用的单元自动启动 |
注意:systemctl status name命令取代了旧版的red hat enterprise linux中的service name status命令
使用systemctl列出单元文件
·查询所有单元的状态,以验证系统启动
[root@localhost ~]# systemctl
·仅查询服务单元的状态
[root@localhost ~]# systemctl --type=service
·调查处于失败或维护状态的任何单元,可选择添加-l选项以显示完整的输出
[root@localhost ~]# systemctl status network -l
·也可以使用status参数来判断特定的但愿是否活动,以及显示该单元是否已启用在系统启动时启动,其他备用命令也可轻松显示活动和已启用状态
[root@localhost ~]# systemctl is-active network
[root@localhost ~]# systemctl is-enabled network
·列出所有以加载单元的活动状态,也可以选择限制单元类型,–all选项可加入不活动的单元
[root@localhost ~]# systemctl list-units --type=service
[root@localhost ~]# systemctl list-units --type=service --all
·查看所有单元的已启用和已禁用设置,也可选择限制单元类型
[root@localhost ~]# systemctl list-unit-files --type=service
automount device path snapshot swap timer
busname mount service socket target
·仅查看失败的服务
[root@localhost ~]# systemctl --failed --type service
启动和停止运行中系统上的系统守护进程:
启动,停止、重启、重新加载和验证状态是管理服务时经常执行的操作
·查看nfs服务状态,但可以看出服务未启动,并启动它
·验证进程正在运行,由于刚才的nfs查看不到PID号,则查看其他服务进行获取
[root@localhost ~]# ps -up 1427
·停止服务并验证
·启动服务并验证其状态,启动服务的pid号发生了变化
·一个命令停止服务加启动服务
[root@localhost ~]# systemctl restart sshd.service
·发出指示使服务读取和重新加载其配置文件,而不完全停止和启动服务,进程id不会改变
[root@localhost ~]# systemctl reload sshd.service
单元依赖项:
服务可能会以其他服务依赖项的形式启动,如果套接字单元已启用,但名称相同的服务单元没有启动,对该网络套接字发出请求时将自动启动该服务,服务也可能会在满足文件系统条件时由路由路径单元触发
systemctl list-dependencies UNIT命令可用于显示必须与特定单元联合启动的其他单元的树,此命令的–reverse选项将显示哪些单元必须要在指定单元启动后才能运行
屏蔽服务:
系统可能针对某一特定功能安装了有冲突的服务,如防火墙(iptables和firewalld),为防止管理员意外启动某一服务,可以屏蔽该服务,屏蔽将在配置目录中创建链接,使得启动该服务时什么也不会发生
[root@localhost ~]# systemctl mask sshd
Created symlink from /etc/systemd/system/sshd.service to /dev/null.
[root@localhost ~]# systemctl unmask sshd
Removed symlink /etc/systemd/system/sshd.service.
重要:禁用的服务不会在系统启动时自动启动,也不会被其他单元文件启动,但可以手动启动,屏蔽的服务无法手动启动,也不会自动启动
使系统守护进程在系统启动时启动或停止:
当相应的systemd配置目录中创建有链接时,服务会在系统启动时启动,这些链接可能通过systemctl命令创建和删除
·查看服务端状态:
[root@localhost ~]# systemctl status sshd.service
·禁用服务并验证其状态,请注意禁用服务不会停止该服务
[root@localhost ~]# systemctl disable sshd.service
·启动服务并验证其状态
[root@localhost ~]# systemctl enable sshd.service
[root@localhost ~]# systemctl is-enabled sshd.service
systemctl命令:
可以在运行中的系统上启动和停止服务,也可启用或禁用服务在系统启动时自动启动
命令 | 任务 |
---|---|
systemctl status UNIT | 查看有关单元状态的详细信息 |
systemctl stop UNIT | 在运行中的系统上停止一项服务 |
systemctl start UNIT | 在运行中的系统上启动一项服务 |
systemctl restart UNIT | 在运行中的系统上重新启动一项服务 |
systemctl reload UNIT | 重新加载运行中服务的配置文件 |
systemctl mask UNIT | 彻底禁用服务,使其无法手动启动或在系统启动时启动 |
systemctl unmask UNIT | 使屏蔽的服务变为可用 |
systemctl enable UNIT | 将服务配置为在系统启动时启动 |
systemctl disable UNIT | 禁止服务在系统启动时启动 |
systemctl list-dependencies UNIT | 列出指定单元需要的单元 |
控制启动过程:
systemd目标是一组应在启动后达到所需状态的systemd单元,下表列出
目标 | 用途 |
---|---|
graphical.target | 系统支持多用户,图形和基于文本的登陆 |
multi-user.target | 系统仅支持多用户,基于文本的登陆 |
rescue.target | sulogin提示,表示基本系统初始化完成 |
emergency.target | sulogin提示,表示initramfs回转完成,且系统root以只读形式挂载于/上 |
某个目标可能属于另一个目标:例如,graphical.target包含multi-user.target,后者反过来取决于basic.target和其他目标,使用以下命令可从命令行查看这些依赖关系:
[root@localhost ~]# systemctl list-dependencies graphical.target | grep target
使用以下命令可查看所有可用目标的概述:
[root@localhost ~]# systemctl list-units --type target --all
使用以下命令可查看磁盘上安装的所有目标的概述:
[root@localhost ~]# systemctl list-unit-files --type target --all
在运行选择目标:在运行的系统中,管理员可以选择使用systemctl isolate命令来切换到其他目标;例如systemctl isolate multi-user.target
注意:
并非所有目标都能隔离,只有单元文件中设置了AllowIsolate=yes的目标才可以隔离,例如graphical.target目标可以隔离,但cryptsetup.target目标不能隔离
设置默认目标
在系统启动且将控制权从initramfs交给systemd后,systemd后尝试激活default.target目标,通常,default.target目标是(/etc/systemd/system/中)指向graphical.target或multi-user.target的符号链接
systemctl工具提供了两个命令来管理链接:get-default和set-default
[root@localhost ~]# systemctl get-default
multi-user.target
[root@localhost ~]# systemctl set-default graphical.target
[root@localhost ~]# systemctl get-default
graphical.target
在启动时选择其他目标
要在启动时选择其他目标,可从启动加载器将特殊选项附加到内核命令行:systemd.unit=。例如,要将系统启动到救援shell,请在交互式启动加载器菜单中传递以下选项:
systemd.unit=rescue.target
要使用这种选择其他目标的方法,针对Red Hat Enterprise Linux 7系统执行一下步骤:
1、重启系统
2、上下键终端启动加载器菜单倒计时
3、将光标移至要启动的条目
4、按e编辑到当前条目
5、将光标移至linux16开头的行,此行为内核命令行
6、附加systemd.unit=desired.target
7、按ctrl+x使用这些更改进行启动
恢复root密码:
在仍以管理器或者具有完整的sudo访问权限的用户的身份登陆时,恢复root用户密码是一项微不足道的任务,但在管理员未登录时,比较有点麻烦,在后面的情况中,管理员可以从Live CD中启动,从其中挂载根文件系统并编辑/etc/shadw,管理员还能够在不使用外部介质的情况下执行根密码恢复
注意:
在Red Hat Enterprise Linux 6以及早期版本中,管理员可以启动系统进入runlevell,然后看到一个root提醒,在Red Hat Enterprise Linux 7计算机上与runlevell最接近的模拟是rescue.target和emergency.target目标,这两个目标都需要root密码才能登录
在Red Hat Enterprises Linux 7中,可以使从initramfs运行的脚本在某些点暂停,提供root shell,然后在该shell存在的情况下继续,虽然这主要是为了进行调试,但也可用于恢复丢失的root密码:
1、重新启动系统
2、按任意键中断启动加载倒计时
3、将光标移动到需要启动的条目
4、将e编辑选定的条目
5、将光标移至linux16开头的行,此行为内核命令行
6、附加rd.break(就在从initramfs向实际系统移交控制权前,该操作会中断)
7、按ctrl+x是这些更改进行启动
注意:
initramfs提示会显示在内核命令行中指定为最后的任何控制台中
重要:
由于此时未启用SELinux,因此任何创建的新文件都不会分配有SELinux上下文,请记住,有些工具(例如passwd)首先会创建一个新的文件,然后移动新文件以代替要编辑的文件,从而有效地创建不带SELinux上下文的新文件
此时要恢复root密码,使用以下步骤:
RedHat7密码忘记重置密码https://jingyan.baidu.com/article/b0b63dbf0e22c64a49307040.html