更改为救援模式
您也可以使用以下命令切换到救援模式
[root@onitroad ~]# systemctl rescue PolicyKit daemon disconnected from the bus. We are no longer a registered authentication agent.
来自 root@onitroad.lab 在 pts/1 上的广播消息(Sun 2015-12-24 23:47:08 IST):
The system is going down to rescue mode NOW!
重要说明:此命令类似于 systemctlisolate rescue.target,但它还会向当前登录系统的所有用户发送一条信息性消息。
要防止 systemd 发送此消息,请使用 --no-wall 命令行选项运行此命令:
本文概述了从 System V init 脚本到 Systemd 的过渡。
systemd 相对于传统 System V init 工具的一些好处包括:
- systemd 永远不会丢失初始日志消息
- systemd 可以根据需要重新生成守护进程
- systemd 记录运行时数据(即,捕获进程的 stdout/stderr)
- systemd 在运行时不会丢失守护进程上下文
- systemd 可以干净地杀死服务的所有组件
配置文件
- RHEL 6 及更早版本中的 init 进程使用 /etc/inittab 文件来指向启动所需的初始化文件(例如 /etc/rc.sysinit)和运行级别服务目录(例如 /etc/rc5.d)上系统。
- 在 RHEL 7 中,可以通过将文件添加到 /etc/systemd 目录以覆盖 /usr/lib/systemd 目录中的永久服务文件来修改服务。
查看和更改默认目标(运行级别)
默认运行级别(之前在 /etc/inittab 文件中设置)现在被默认目标替换。
默认目标的位置是 /etc/systemd/system/default.target。
要查看现有的默认目标,请使用以下语法:
[root@onitroad ~]# systemctl get-default graphical.target
我们也可以通过检查 default.target 的符号链接来验证它
[root@onitroad ~]# ls -l /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 36 Aug 20 12:58 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
正如您所看到的,因为 default.target 链接到 graphics.target 因此相同的设置为默认值。
使用以下语法将默认目标设置为不同的目标级别:
[root@onitroad ~]# systemctl set-default multi-user.target Removed symlink /etc/systemd/system/default.target. Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
检查验证一下
[root@onitroad ~]# ls -l /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 41 Dec 24 23:31 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target
如果服务器处于救援模式或者 chroot 环境,则可以使用以下命令语法设置默认目标:
# ln -sf /lib/systemd/system/<desired>.target /etc/systemd/system/default.target
SysV 运行级别 与 systemd target的比较
Runlevel | target 单元 | 描述 |
---|---|---|
0 | runlevel0.target,poweroff.target. | 关闭和关闭系统。 |
1 | runlevel1.target,Rescue.target. | 设置救援shell 。 |
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. | 关闭并重新启动系统。 |
将 sysv init 脚本转换为 systemd
- 在 RHEL 7 运行级别之前的早期 Red Hat 版本中,运行级别用于标识在请求该运行级别时将启动或者停止的一组服务。
- 现在,从 Red Hat Enterprise Linux 7 开始,运行级别概念被删除并替换为“目标”,以将启动或者停止的服务集组合在一起。 Systemd 已取代 sysVinit 作为默认服务管理器。
- 一些 sysVinit 命令已与它们的 RHEL 7 对应命令进行了符号链接,但是它们最终可能会被弃用,以支持未来的标准 systemd 命令
- 一个目标还可以包括其他目标(例如,多用户目标包括一个 nfs 目标)。
- 有与早期运行级别一致的 systemd 目标。
以下列表显示了 systemd 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 | graphics.target |
运行级别 6 | runlevel6.target | reboot.target |
查看当前目标
要列出所有当前加载的目标单元,请运行以下命令:
[root@onitroad ~]# systemctl list-units --type target UNIT LOAD ACTIVE SUB DESCRIPTION basic.target loaded active active Basic System cryptsetup.target loaded active active Encrypted Volumes getty.target loaded active active Login Prompts UNIT LOAD ACTIVE SUB DESCRIPTION basic.target loaded active active Basic System cryptsetup.target loaded active active Encrypted Volumes getty.target loaded active active Login Prompts graphical.target loaded active active Graphical Interface swap.target loaded active active Swap sysinit.target loaded active active System Initialization timers.target loaded active active Timers
LOAD=反映单元定义是否正确加载。
ACTIVE=高级单元激活状态,例如:SUB的泛化。
上述命令仅显示“活动”单元。
如果要列出所有加载的单元,而不考虑它们的状态,请使用--all或者-a命令行选项运行此命令:
[root@onitroad ~]# systemctl list-units --type target --all UNIT LOAD ACTIVE SUB DESCRIPTION basic.target loaded active active Basic System cryptsetup.target loaded active active Encrypted Volumes emergency.target loaded inactive dead Emergency Mode final.target loaded inactive dead Final Step getty.target loaded active active Login Prompts graphical.target loaded active active Graphical Interface local-fs-pre.target loaded active active Local File Systems (Pre) local-fs.target loaded active active Local File Systems multi-user.target loaded active active Multi-User System network-online.target loaded active active Network is Online network-pre.target loaded inactive dead Network (Pre) network.target loaded active active Network nfs-client.target loaded active active NFS client services nss-lookup.target loaded inactive dead Host and Network Name Lookups nss-user-lookup.target loaded active active User and Group Name Lookups paths.target loaded active active Paths remote-fs-pre.target loaded active active Remote File Systems (Pre) remote-fs.target loaded active active Remote File Systems rescue.target loaded inactive dead Rescue Mode shutdown.target loaded inactive dead Shutdown slices.target loaded active active Slices sockets.target loaded active active Sockets sound.target loaded inactive dead Sound Card swap.target loaded active active Swap sysinit.target loaded active active System Initialization ● syslog.target not-found inactive dead syslog.target time-sync.target loaded inactive dead System Time Synchronized timers.target loaded active active Timers umount.target loaded inactive dead Unmount All Filesystems
列出了29个装载单元。
要显示所有已安装的单元文件,请使用 'systemctl list-unit-files'。
LOAD=反映单元定义是否正确加载。
ACTIVE=高级单元激活状态,例如:SUB的泛化。
SUB=低级别单元激活状态,值取决于单元类型。
更改当前目标(运行级别)
在 RHEL 6 中,这是使用 telinit runlevel
完成的
在 RHEL 7 中,您必须使用以下语法
# systemctl isolate name.target
例如
[root@onitroad ~]# systemctl isolate rescue.target PolicyKit daemon disconnected from the bus. We are no longer a registered authentication agent.
自从我切换到运行级别 1 后,我与终端断开连接
服务所在的位置
- 在 systemd 之前,服务作为脚本存储在 /etc/init.d 目录中,然后链接到不同的运行级别目录(例如 /etc/rc3.d、/etc/rc5.d 等)。
- 带有systemd的服务被命名为something.service,比如firewalld.service,存放在/lib/systemd/system和/etc/systemd/system目录下
- 将 /lib 文件视为更持久的文件,将 /etc 文件视为我们可以根据需要修改配置的地方。
- 在 RHEL 7 中启用服务时,服务文件会链接到 /etc/systemd/system/multi-user.target.wants 目录中的文件
例如,如果我们运行
systemctl enable kdump.service
将创建一个指向 /usr/lib/systemd/system/kdump.service 的符号链接(/etc/systemd/system/multi-user.target.wants/kdump.service)
Created symlink from /etc/systemd/system/multi-user.target.wants/kdump.service to /usr/lib/systemd/system/kdump.service.
此外,较旧的 System V init 脚本是实际的 shell 脚本。
负责执行相同工作的 systemd 文件更像是包含启动服务所需信息的 .ini 文件。