CentOS 7上的系统管理之:Systemd和systemctl(5)

[root@c7-server ~]# systemctl mask httpd.service Created symlink from /etc/systemd/system/httpd.service to /dev/null. [root@c7-server ~]# systemctl start httpd.service Failed to start httpd.service: Unit is masked. [root@c7-server ~]# systemctl enable httpd.service Failed to execute operation: Cannot send after transport endpoint shutdown

可使用unmask来取消mask。

~]# systemctl unmask httpd.service Removed symlink /etc/systemd/system/httpd.service.

启动一个冲突的服务

在systemd中存在积极的(positive)依赖和消极的(negative)依赖。启动某个特定的服务,可能会要求启动一个或多个其他服务(此为积极的依赖),或者要求停止一个或多个其他服务(此为消极的依赖)。

当你尝试启动某个服务的时候,systemd会自动解决这些依赖关系。注意,systemd不会显式通知用户。如果你已经启动了一个服务A(比如postfix),然后你尝试启动服务B(比如sendmail),服务B和服务A有消极的依赖关系,那么当你启动服务B的时候,服务A会自动被停止。

注:sendmail和postfix都是邮件服务,之间存在消极的依赖关系。

TARGET

Systemd上使用target来模仿以前的运行级别的概念。不过要注意,这只是模仿,并不代表完全一样。target可以看作是一系列的unit的集合从而实现某个运行级别的功能。并且这些target之间会存在一个依赖链的关系。例如想启动图形界面(graphical.target)的话,就需要启动图形服务(gdm.service)或者账户服务(accounts-daemon.service)并且需要激活multi-user.target。同样地,multi-user.target需要启动网络服务(NetworkManager.service)或者D-Bus(dbus.service)并激活basic.target。basic.target也有自己的依赖。

运行级别和target的对应关系如下表。

运行级别   Target Units   描述  
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   带图形的多用户模式  
6   runlevel6.target, reboot.target   重启  

查看、切换运行级别/target的新旧命令如下表所示,应尽量避免使用旧的命令。

旧命令   新命令   描述  
runlevel   systemctl list-units --type target   查看当前系统运行于哪个target下  
telinit runlevel   systemctl isolate name.target   修改当前的target  
查看默认target

~]# systemctl get-default graphical.target

这个值的获取,其实是去检索字符链接。

~]# ls -l /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 36 Oct 17 15:06 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target

查看当前target

~]# systemctl list-units --type target UNIT LOAD ACTIVE SUB DESCRIPTION basic.target loaded active active Basic System bluetooth.target loaded active active Bluetooth cryptsetup.target loaded active active Local Encrypted Volumes getty-pre.target loaded active active Login Prompts (Pre) 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 active active Network (Pre) network.target loaded active active Network nfs-client.target loaded active active NFS client services 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 rpc_pipefs.target loaded active active rpc_pipefs.target slices.target loaded active active Slices sockets.target loaded active active Sockets sound.target loaded active active Sound Card swap.target loaded active active Swap sysinit.target loaded active active System Initialization timers.target loaded active active Timers

这个命令查询出来的,是当前已加载并激活的target。那么我们如何从里面找到当前的target是什么呢?

在bootup(7)的man手册中有描述,并不是所有的unit都是并行启动的,局部并行,整体依然是有先后次序之分的。例如:

sysinit.target --> basic.target --> multi-user.target --> graphical.target

rescue.target和emergency.target应该都是单独出现,也就是说:

见到rescue.target或者emergency.target或者graphical.target,那么就是对应的target,这三者之间不会有并存的关系。

见到multi-user.target,就看看有没有graphical.target,没有的话那就是multi-user.target。

设置默认target

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11611.html