vlambda博客
学习文章列表

centos7与之前版本服务管理命令的区别

一、概述

   centos7之前的版本(不包括7),系统服务启动停止以及状态查看的管理命令工具是service,chkconfig命令用于设置某个服务在系统某个运行级别是否自启动。

       centos7以后版本用systemd服务统一管理服务进程,对于服务的启停以及开机自启动由命令systemctl统一管理。

     我们日常执行的命令service、systemctl启停服务时读取了那个目录文件;chkconfig与systemctl命令设置开机启停服务时执行了什么操作。请见下文。


二、service启停服务和systemctl启停服务读取执行的文件。

       service命令管理的服务其相关脚本存储目录:/etc/init.d

       systemctl命令管理的服务其相关脚本存储目录:/usr/lib/systemd/system

centos7与之前版本服务管理命令的区别

     

三、服务自启动

       开机自启动即服务随系统启动而启动,简单讲就是系统在初始化完成后会自动读取某个标识目录,在此目录内的即表示系统运行客观需求或用户主观意识要求启动的服务。下面解答两个问题:

       a、存储自启动服务相关脚本文件的目录具体是哪个?

       b、如何将某个服务加入到自启动的标识目录文件中?

       1)、问题1:基于问题1先稍微扩展下常识,centos存在多个运行模式,常见的如命令行和图形化,基于centos7前后版本其启动时加载的对应存储服务的目录也不同:

         ☐ centos7以前版本(不包括7):runlevel有“0、1、......、6” 总共7中模式,如我们常用的多用户命令行模式为"3",图形化模式为“5”,而每一种模式都有其对应的关联文件,即在指定模式下启动开机时就加载对应级别的目录,而相关服务脚本即存储在此目录中。其路径为“ /etc/rc["runlever"].d”;常用的命令行模式加载的runlevel文件为“/etc/rc3.d”

         ☐ centos7以后版本:采用了target的模式,常用的命令行模式为“multi-user.target”可理解为centos6中runlevel 3的模式,对等centos6中runlevel 5图形界面的target为graphical.target(其中包含了命令行模式)。其路径为/etc/systemd/system/“target”;常用的命令行模式对应加载的target即为“ /etc/systemd/system/multi-user.target.wants”

       2)、问题2:基于以上问题1的描述可知,如centos6中如需在命令行模式下开机自启动的服务,则需要将对应服务脚本关联至runlevel 3启动加载的目录/etc/rc3.d下;而对应centos7中则是将对应服务脚本关联至对应的target 目录"/etc/systemd/system/multi-user.target.wants"。用命令运行模式示例如下:

        ☐ 示例1:centos6中开机自启动

centos7与之前版本服务管理命令的区别

centos7与之前版本服务管理命令的区别

       解:设置开机启停的chkconfg命令即创建软连接文件将服务的管理脚本文件从服务目录/etc/init.d下,关联至运行级别3的开机加载目录/etc/rc3.d下;其中S开头即代表开机运行此服务,K开头即开机kill此服务。


        ☐ 示例2:centos7中开机自启动

        解:设置开机自启的命令即创建软连接文件将服务的管理脚本文件从服务目录/usr/lib/systemd/system/下,创建软连接至对应的target目录/etc/systemd/system/multi-user.target.wants下;关闭开机自启则是将对应服务脚本的链接文件从/etc/systemd/system/multi-user.target.wants/下删除。


四、总结

        1)、基于此可知针对不同版本,若想将自建服务或脚本通过系统服务工具管理,则需按照不同版本做不同操作:

              ☐ centos6:若自建的脚本等需要通过系统服务管理工具service,则需要在/etc/init.d下按照规范格式创建服务脚本,建好后则可用chkconfig工具设置是否开机自启;

              ☐ centos7:若自建的脚本等需要通过系统服务管理工具systemctl,则需要在/usr/lib/systemd/system/下按照规范格式创建服务脚本,建好后同样也可用systemctl管理是否开机自启;

         2)、关于系统服务管理工具设置服务开机是否自启,其实质就是将服务管理脚本从服务脚本的存储目录做“软连接” 至开机加载的服务目录文件中。如“命令行模式”解释具体如下:

               ☐ centos6:通过chkconfig --level “runlevel” “service_name” on/off工具设置某一服务是否开机自启(前提是已经能正常通过service工具管理),其实质是在系统启动加载的runlevel目录/etc/rc3.d下创建软连接文件,其软链接指向的实际文件为service命令工具读取的服务脚本文件(存储目录为/etc/init.d/)。

               ☐ centos7:通过systemctl enable/disable “service_name”工具设置某一服务是否开机自启(前提是已经能正常通过systemctl工具管理进行启停操作),其实质是在系统启动加载的target目录/etc/systemd/system/multi-user.target.wants/下创建软连接文件,其软链接指向的实际文件为目标服务脚本文件存储的路径文件(存储目录为/usr/lib/systemd/system/)。

          3)、相较于init,systemd优化了其串行顺序启动方式缓慢的缺点;同时systemd按照unit划分集成了系统大部分的资源管理功能。

          4)、centos7向下兼容,/etc/init.d任可放置服务脚本文件,通过chkconfig创建软链接文件设置其开机自启动。