CentOS 7:浅谈系统服务Systemd与System V

1. daemon与Service

1.1 早期daemon主要分类

1.1.1 服务的启、停、状态与查看的方式

(1)启动:/etc/init.d/daemon start
(2)关闭:/etc/init.d/daemon stop
(3)重启:/etc/init.d/daemon restart
(4)查看:/etc/init.d/daemon status

1.1.2 服务的启动

  (1)独立启动模式(stand alone),该服务不需要其他服务来管理,直接常驻内存,因此运行速度启动速度极快。
  (2)超级守护进程(super daemon),也称总管程序(super daemon),它由特殊的xinetd和inetd提供socket对应或port对应的管理,只有当有用户要求该socket或端口时,该服务才会被启动。

1.1.3 服务依赖性问题

  简单地说,依赖性就是,想要使用A服务,但是A服务必须在B服务启动后才能使用,而B服务有可能依托于C服务,这样就形成一个条状的服务依懒性,其实还有更复杂的依赖形式,读者可自行查阅。

1.1.4 运行级别的分类

  基本上Linux提供7个运行级别,分别是0-6,其中1(单人维护模式)、3(命令行模式,字符界面)、5(图形界面)。各个运行级别的脚本是通过**/etc/rc.d/rc[0~6]/SXXdaemon链接到/etc/init.d/daemon**,链接文件名[SXXdaemon]的功能为:S为启动该服务,XX是数字,为启动顺序,由于SXX的设置,使得服务能够有序执行,并且依懒性问题也能得到解决。

1.1.5 制定运行级别默认启动的服务

  通过以下命令处理默认的启动,不启动,查看默认的启动与不启动daemon。
  默认要启动:chkconfig daemon on
  默认不启动:chkconfig daemon off
  查看启动与否:chkconfig –list daemon

1.1.6 运行级别切换

  从命令行runlevel 3切换到 runlevel 5(图形界面),直接运行init 5。

1.2 Service相关目录

  如下图/etc下的一级目录,我们发现**/etc/init.d -> /etc/rc.d/init.d**,它们之间做了硬链接,事实上,/etc/rc.d/init.d包含了所有的service的控制脚本。
  /etc/rc*.d -> /etc/rc.d/rc*.d : /etc/rc.d/rc*.d 下包含了所有的service的自动启动选项的配置

1.3 service的管理工具/sbin/service

  可以使用工具/sbin/service来查看和管理系统上所有的service,
  查看状态:/sbin/service --status-all
  启停某个服务:/sbin/service XXX start/stop/restat
  打开/sbin/service脚本,我们可以看到其实service命令实现很简单,就是遍历/etc/init.d (-> /etc/rc.d/init.d)下的所有的service控制脚本,执行相应service控制脚本中的操作。

1.4 service的自动启动控制工具/sbin/chkconfig

  使用工具/sbin/chkconfig来简化service启动选项的配置。
  用来查看所有服务的启动选项配置:chkconfig --list
  用来查看iptables service的启动选项的配置:chkconfig iptables

1.5 xinetd服务

  xinetd(eXtended InterNET services daemon),它取代了inetd,并且提供了访问控制、加强的日志和资源管理功能,已经成了Red Hat 7 和 Mandrake 7.2的Internet标准超级守护进程。

2. Systemd系统配置服务

2.1 Systemd优势

(1)并行处理所有服务,加速开机流程。
  Init启动脚本是顺序进行的,没有依懒性的服务,也必须排队等待前面的服务执行完,才能启动,而systemd可以同时启动服务,提高用户体验度。
(2)On-demand启动方式
  Systemd是搭配systemctl命令来处理的,无需额外的命令来支持。早期的SystemV需要init/chkconfig/service等命令,并且由于systemd常驻内存,响应速度极快。
(3)自我依赖性检查
  对于新手来说,这个功能很香,早期的安装一个软件时,有可能依赖几十个包,但是systemd可以自动开启服务依赖性检查,如果需要启动A服务,倘若A服务依赖于B服务,系统会帮你自动开启B服务。
(4)分类明确,易于管理
  Systemd下管理的服务居多,因此systemd定义了不同类型的服务单位(Unit),包括“service, socket, target, path, snapshot, timer”等,后续的文章中会讲几个常用和常见的类型。
(5)向下兼容init服务
  由于某种原因,systemd事实上并不能完全取代init, 主要表现在以下几点:
  1)除了runlevel 1、3、5在systemd的target类型服务单元有对应,其余没有对应。
  2)systemctl语法有限制,而/etc/init.d/daemon是纯脚本,可以自定义参数。
  3)systemd启动过程中,无法与管理员通过标准的输入传入信息。
  4)如果某个服务是管理员手动启动,而非使用systemctl启动,则systemd将服务检测的该服务,从而不能管理。

2.2 systemd的配置文件

(1)/usr/lib/systemd/system/: 每个服务最主要的启动脚本设置,类似于之前的/etc/init.d
(2)/run/systemd/system/: 系统执行过程中所产生的服务脚本,优先级高于(1)
(3)/etc/systemd/system/: 管理员根据主机系统的需求所建立的执行脚本,优先级高于(2)。

全部评论

相关推荐

手撕没做出来是不是一定挂
Chrispp3:不会,写出来也不一定过
点赞 评论 收藏
分享
冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务