C/C++教程

CentOS7服务管理(一)

本文主要是介绍CentOS7服务管理(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Systemd从字面意思上看,应该是系统守护进程的意思,所有的系统服务都是有Systemd来启动的,它的PID是1,取代原来CentOS6的init.d。
Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面,它包括了:systemctl、systemd-analyze、hostnamectl、localectl、 timedatectl、loginctl等多个管理工具。
CentOS7的systemd服务管理方式和centOS6的init的管理方式已经有了很大区别。最大的区别就是systemd是常驻内存的,因此执行速度比较快,并且实现了并发式的服务启动,解决了服务的依赖性问题。

systemctl命令

systemctl是 Systemd 的主命令,用于管理系统和服务状态。

systemctl poweroff #系统关机
systemctl reboot #重新开机
systemctl suspend #进入暂停模式
systemctl hibernate #进入休眠模式
systemctl rescue #强制进入救援模式
systemctl emergency #强制进入紧急救援模式

二、Unit

Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。

2.1 unit类型

Unit 一共分成12种类型:

类型含义
Service unit 系统服务
Target unit 多个 Unit 构成的一个组
Device Unit 硬件设备
Mount Unit 文件系统的挂载点
Automount Unit 自动挂载点
Path Unit 文件或路径
Scope Unit 不是由 Systemd 启动的外部进程
Slice Unit 进程组
Snapshot Unit Systemd 快照,可以切回某个快照
Socket Unit 进程间通信的 socket
Swap Unit swap 文件
Timer Unit 定时器

unit管理

#命令:systemctl [command] [unit]
#command主要包含:
start:启动unit
stop:关闭unit
restart:重启unit
reload:重载unit的配置
enable:设置下次开机时,unit会被启动
disable:设置下次开机时,unit不会被启动
is-active :目前有没有正在运行中
is-enable :开机时有没有默认要启用这个unit
show:显示某个 Unit 的所有底层参数

2.3 单个unit状态查看

#命令:systemctl [command] [unit]
#command主要包含:
status:目前后面接的这个 unit 的状态,会列出有没有正在执行、开机默认执行否、登录等信息等。
is-active :目前有没有正在运行中
is-enable :开机时有没有默认要启用这个unit
is-failed:启动失败的unit
show:显示某个 Unit 的所有底层参数
#status显示的unit状态类型
#Loaded是下次开机启动的状态,有以下几种基本状态:
    enabled:这个daemon将在开机时被执行 
    disabled:这个daemon在开机时不会被执行 
    static:这个daemon不可以自己启动(enable不可),不过可能会被其他的enabled的服务来唤醒(依赖的服务) 
    mask:这个daemon无论如何都无法被启动,因为已经被强制注销(非删除)。可通过 systemctl unmask 方式改回原本状态。
#Active是当前的状态,有以下几种基本状态:
    active (running):正有一只或多只程序正在系统中执行的意思,举例来说,正在执行中的vsftpd就是这种模式。 active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。
    active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。
    inactive:这个服务目前没有运行的意思。

 

范例一:看看目前 atd 这个服务的状态为何?
[root@study ~]# systemctl status atd.service
atd.service - Job spooling tools
    Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled)
    Active: active (running) since Mon 2015-08-10 19:17:09 CST; 5h 42min ago
Main PID: 1350 (atd)
    CGroup: /system.slice/atd.service
            └─1350 /usr/sbin/atd -f
Aug 10 19:17:09 study.centos.vbird systemd[1]: Started Job spooling tools.
# Loaded:这行在说明,开机的时候这个 unit 会不会启动,enabled 为开机启动,disabled 开机不会启动
# Active:现在这个 unit 的状态是正在执行(running)或没有执行 (dead)

2.4 当前系统的所有unit状态

systemctl list-units # 列出正在运行的 Unit
systemctl list-units --all # 列出所有Unit,包括没有找到配置文件的或者启动失败的
systemctl list-units --all --state=inactive # 列出所有没有运行的 Unit
systemctl list-units --failed # 列出所有加载失败的 Unit
systemctl list-units --type=service # 列出所有正在运行的、类型为 service 的 Unit

2.5 依赖关系

systemctl list-dependencies [unit] #列出unit依赖
systemctl list-dependencies --all [unit] #展开显示依赖关系
systemctl list-dependencies [unit] [--reverse] #反向查询依赖,unit被谁依赖

三、Target

启动计算机的时候,需要启动大量的 Unit。如果每一次启动,都要一一写明本次启动需要哪些 Unit,显然非常不方便。Systemd 的解决方案就是 Target。
简单说,Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit。从这个意义上说,Target 这个概念类似于"状态点",启动某个 Target 就好比启动到某种状态。
传统的init启动模式里面,有 RunLevel 的概念,跟 Target 的作用很类似。不同的是,RunLevel 是互斥的,不可能多个 RunLevel 同时启动,但是多个 Target 可以同时启动。例如
默认启动图形tatget,这个target又依赖了multi-user.target等其他target。

3.1 target管理

$ systemctl list-unit-files --type=target # 查看当前系统的所有 Target
$ systemctl list-dependencies multi-user.target # 查看一个 Target 包含的所有 Unit
$ systemctl get-default # 查看启动时的默认 Target
$ sudo systemctl set-default multi-user.target # 设置启动时的默认 Target
$ sudo systemctl isolate multi-user.target #切换 Target
graphical.target:就是文字加上图形界面,这个项目已经包含了下面的 multi-user.target. multi-user.target:纯文本模式. 
rescue.target:在无法使用root登陆的情况下,systemd在开机时会多加一个额外的暂时系统,与你原本的系统无关。 
emergency.target:紧急处理系统的错误,还是需要使用root登陆的情况,在无法使用rescue.target 时,可以尝试使用这种模式. 
shutdown.target:就是关机的流程。 
getty.target:可以设置你需要几个tty之类的,如果想要降低tty的项目,可以修改这个配置文件.

3.2 Target 与 传统 RunLevel 的联系和区别

传统Runleveltarget name ->软链接
Runlevel 0 runlevel0.target -> poweroff.target
Runlevel 1 runlevel1.target -> rescue.target
Runlevel 2 runlevel2.target -> multi-user.target
Runlevel 3 runlevel3.target -> multi-user.target
Runlevel 4 runlevel4.target -> multi-user.target
Runlevel 5 runlevel5.target -> graphical.target
Runlevel 6 runlevel6.target -> reboot.target

systemd与init进程的主要差别如下
1.默认的 RunLevel(在/etc/inittab文件设置)现在被默认的 Target 取代,位置是/etc/systemd/system/default.target,通常符号链接到graphical.target(图形界面)或者multi-user.target(多用户命令行)。
2.启动脚本的位置,以前是/etc/init.d目录,符号链接到不同的 RunLevel 目录 (比如/etc/rc3.d、/etc/rc5.d等),现在则存放在/lib/systemd/system和/etc/systemd/system目录。
3.配置文件的位置,以前init进程的配置文件是/etc/inittab,各种服务的配置文件存放在/etc/sysconfig目录。现在的配置文件主要存放在/lib/systemd目录,在/etc/systemd目录里面的修改可以覆盖原始设置。

这篇关于CentOS7服务管理(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!