【linux 服务】System V、Systemd、Systemctl的概念以及理解
介绍
Systemctl(centos7): 一个systemd工具,主要负责控制systemd系统和服务管理器。
Systemd(centos6):一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。
System V(centos5):SysV 初始化脚本(/etc/init.d),用来控制系统启动和关闭,System V Interface Definition (SVID) 是一个System V 如何工作的标准定义。
system V
原理
- linux系统类似于window系统一样可以自启动和禁止一些服务程序,在system V管理体系中,这些服务脚本程序存在于/etc/init.d文件夹下,在etc文件夹下,存在rc0,rc1 …rc6等目录。顾名思义,这些目录下的文件即为不同的运行级别需要启动或者禁止的服务,实际上,这些目录下的文件只是一些符号链接文件,指向init.d下相应的服务。
- linux系统init进程会根据inittab配置文件确定当前运行级别并执行相应级别rc目录的服务脚本程序,rc目录下存在两种文件,一种以S打头代表启动服务,一种以K打头禁止服务,字母后两位数字代表执行顺序,按从小到大顺序执行。
- 我们可用runlevel命令查看当前系统运行级别,init X(0~6)切换其它运行级别,若需要设置默认启动的运行级别,需要修改inittab文件id:2:initdefault:这一行,改后reboot即可默认级别生效。
工具使用
system V主要用chkconfig,sevice update-rc.d
命令管理服务,在使用这些命令操作服务前,需要将相应服务脚本放入/etc/init.d
目录中,在centos7中基本已经不用。
chkconfig
(是check config
的缩写)基本命令如下:
chkconfig –add servicename # 添加服务
chkconfig –level 2345 servicename on # 使服务自动启动
chkconfig –level 2345 servicename off # 使服务自动禁止
chkconfig –del servicename # 删除服务
chkconfig servicename status # 检查服务状态
chkconfig –list # 显示所有已启动的服务
service
基本命令如下:
service servicename start # 启动某服务
service servicename stop # 停止某服务
service servicename restart # 重启某服务
update-rc.d
基本命令如下:
update-rc.d -f servicename remove # 删除服务
update-rc.d service start 2 3 4 5 stop 0 1 6 # 使服务在指定级别自动启动或禁止
systemd
原理
-
systemd
是Linux下的一种init软件,Systemd
目的是要取代Unix时代以来一直在使用的init系统,兼容SysV和LSB的启动脚本,而且够在进程启动过程中更有效地引导加载服务。 -
在
systemd
的管理体系里面,以前的运行级别(runlevel
)的概念被新的运行目标(target
)所取代。 -
tartget
的命名类似于multi-user.targe
t等这种形式。- 原来的运行级别
3(runlevel3)
就对应新的多用户目标(multi-user.target
) run level 5
就相当于graphical.target
。
- 原来的运行级别
-
由于不再使用runlevel概念,所以
/etc/inittab
也不再被系统使用 。(补充: 无怪乎在新版本ubuntu上找不到inittab文件了) -
而在systemd的管理体系里面,默认的
target
(相当于以前的默认运行级别)是通过软链来实现。- 例如:
ln -s /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target
- 例如:
-
在
/lib/systemd/system/
下面定义runlevelX.target
文件目的主要是为了能够兼容以前的运行级别level的管理方法。 -
事实上
/lib/systemd/system/runlevel3.target
,同样是被软连接到multi-user.target
。
特点
- 系统引导时实现服务并行启动
- 按需激活进程 (开机后进入需要启动的程序,会进入半激活状态,第一次访问的时候会直接执行)
- 系统状态快照
- 基于依赖关系定义服务控制逻辑
systemctl
-
systemctl就是一个==负责和守护进程==systemd通信的客户端工具。systemd使用systemctl命令管理。
-
使用systemctl命令需事先将xxx.service脚本放入/etc/systemd/system目录中
systemctl enable xxx.service # 使服务自启动
systemctl disable xxx.service # 使服务自动禁止
systemctl status xxx.service # 检查服务状态
systemctl start xxx.service # 启动某服务
systemctl stop xxx.service # 停止某服务
systemctl restart xxx.service # 重启某服务
systemctl list-unit-files # 列出所有配置文件
systemctl list-unit-files
主要列出来了 服务单元 和状态
状态 | 释义 |
---|---|
disabled | 禁止开机自启动 |
enable | 开机自启动 |
static | 不确定是否启动(如果别的自启动项依赖于该服务,则该服务启动,否则不启动 |
systemctl list-units
名称 | 介绍 | |
---|---|---|
UNIT | 服务单元名称 | |
LOAD | systemd是否正切解析了单元的配置并将该单元加载到内存中 | |
ACTIVE | 单元的高级别激活状态。此信息表明单元是否成功启动 | |
SUB | 单元的低级别激活状态。此信息指示有关该单元的更多详细信息。信息视单元类型、状态以及单元的执行方式而异 | |
DESCRIPTION | 单元的简短描述 |
注意:
systemctl list-units
命令显示systemd服务尝试解析并加载到内存中的单元;- 它不显示已安装但未启用的服务。
- 要查看素有已安装的单元文件的状态,需要使用systemctl list-unit-files命令