文章目录
什么是daemon与服务(service)
服务是功能的体现。daemon是实现服务的进程。通常不用将二者做详细区分。daemon是一个程序执行后的程序,daemon本身这个程序的命名通常是在服务的名称后加d。这个d是daemon的意思。
早期的system V的 init管理行为中的主要分类(Optional)
system V是Unix的旧版本。当时,用SysV的init脚本程序启动系统服务。系统首先调用的程序是init,再由init去唤醒其他服务。
init的管理机制的特点:
1.对服务的操作有:启动,关闭,重启,状态观察。所有服务启动脚本都在/etc/init.d目录下。命令格式如下:
/etc/init.d/daemon command #command 可以是start/stop/restart/status。分别对应启动/关闭/重启/状态观察
2.服务启动的方式分为独立启动(stand alone)和被一个总管程序(super daemon)管理。前置服务独立启动,且该服务常驻内存,反应速度快。后者由xinetd/inetd这种总管程序提供socket对应或port对应的管理。用户由请求时,由总管程序唤醒相应的服务程序。缺点是唤醒服务慢。
3.服务的相依性:服务的实现常常需要其他服务的支持。inti再管理员手动处理某服务时,无法协助唤醒支持它的服务。
4.执行等级分类:开机内核调用init,后init据用户自订的使用等级(runlevel)来唤醒不同的服务,以进入不同的操作界面。Linux有7个执行等级(0~6)。1是单人维护模式、3是纯文本模式、5是文字加图形界面模式。
不同执行等级的启动脚本是通过 /etc/rc.d/rc[0-6]/SXXdaemon
链接到 /etc/init.d/daemon
,链接文件名 (SXXdaemon)的意义为:S为启动该服务,XX是数字,为启动的顺序。由于有 SXX 的设置,因此在开机时可以“依序执行”所有需要的服务, 同时也能解决相依服务的问题。这点与管理员自己手动处理不同。
5.制定执行等级默认要启动的服务:若要创建SXXdaemon文件,则不用管理员手动创建链接文件。可执行以下指令:
chkconfig daemon on/off #默认启动/不启动
chkconfig daemon --list daemon #观察默认为启动否
6.runlevel的切换:从纯命令行(runlevel 3)切换到图形界面(runlevel 5),执行“init 5”即可关闭原来服务,打开runlevel5所需的服务。
systemd使用的unit分类
从CentOS 7.x后,用init启动脚本来启动其他服务的方式被systemd这个启动服务管理机制代替。systemd的优点如下 :
1.同时处理所有服务,开机快:init 启动脚本即使对不相依的服务也是“一项一项任务依序启动”的。当os和硬件支持多核心架构时,systemd让所有服务同时启动的方式自然更快。
2.一经要求就回应的 on-demand 启动方式: 整个systemd 仅由一个systemd 服务配合 systemctl 指令来处理,指令不再繁杂。且systemd由于常驻内存,因此任何要求 (on-demand) 都可以立即处理后续的 daemon 启动的任务。
3.服务相依性的自我检查和自动启动:systemd会自动启动服务的支撑服务。
4.依据daemon对服务分类:systemd将每个daemon执行脚本称为一个服务单位(unit),每个unit根据功能归入不同的类型(type)。类别有:系统服务(service)、数据监听与交换的插槽档服务 (socket)、储存系统状态的快照类型(snapshot)、提供不同类似执行等级分类的操作环境 (target),path,timer等类型。(类似独立服务与总管程序的分类)
5.将多个 daemons 集合成为一个群组:systemd 将许多的功能集合成为一个target 项目。1个target==许多daemon。(类似runlevel)
6.向下相容旧有的 init 服务脚本:init 启动脚本也能够通过 systemd 来管理。
init中systemd无法取代的部分:
只有执行等级1,3,5可以在systemd的某些target类型中有对应;
一个管理程序systemctr管理全部的systemd,systemctr不可自订参数,支持的语法有限制(命令形式不够多样);
不是用systemctr启动的服务,systemd无法检测到;
systemd 启动过程中,无法与管理员过 standard input 传入讯息!因此,自行撰写systemd 的启动设置时,务必要取消互动机制(连通过启动时传进的标准输入讯息也要避免!)!!!
systemd 的配置文件所在目录 .
/usr/lib/systemd/system/ #服务的启动脚本设置。类似/etc/init.d目录
/run/systemd/system/