Linux系统管理:服务service&daemon

1. 系统服务

1.1 daemon和service

  Linux操作系统为了提供一些服务,这些服务称为Service,而提供服务的程序称为Daemon。举例来说,达成循环型例行性工作排程服务(service)的程序为crond这个daemon。
  Unix采用的是system V版本来进行操作系统的服务管理,启动系统服务的管理方式为init脚本程序的方式;如今,从CentOS7.x以后,红帽的distribution改用systemd启动服务管理机制,有如下好处

  • 平行处理所有服务,加速开机流程:不相依服务可以同时启动
  • 一经要求就响应的on-demand 启动方式:管理系统服务只需systemctl一个指令
  • 服务相依性的自我检查:无需管理员进行相依性分析,在启动某个服务前会自动帮管理员启动未启动的依赖服务;
  • 依daemon 功能分类:每个服务为一个unit单元,并有不同的type(service, socket, target, path, snapshot, etc.);
  • 将多个daemons 集合成为一个群组:类似于systemV中的runlevel,将许多的功能集合为一个target选项,作为操作环境,亦即执行了多个daemon;
  • 向下兼容旧有的init 服务脚本:如使用init 3可以切换到图形界面。

  但是systemd不能完全取代systemV。其中有runlevel对应不完全,systemctl支持语法有限制,不可自定义参数;管理员手动启动服务无法通过systemd进行管理;编制systemd启动设定,不能存在互动机制等。

@systemd的配置文件

  • /usr/lib/systemd/system/:每个服务最主要的启动脚本设定,有点类似以前/etc/init.d 底下的文件;
  • /run/systemd/system/:系统执行过程中所产生的服务脚本,这些脚本的优先序要比/usr/lib/systemd/system/ 高;
  • ★/etc/systemd/system/:管理员依据主机系统的需求所建立的执行脚本,其实这个目录有点像以前/etc/rc.d/rc5.d/Sxx 之类的功能,执行优先序又比/run/systemd/system/ 高;

系统开机后执行哪些服务取决于/etc/systemd/system/目录中的文件,观察发现其中许多连结档,连接/usr/lib/systemd/system/中的脚本文件。

除了以上三个目录与systemd的daemon运作有关外,还有三个目录同样有关:

  • /etc/sysconfig/*:几乎所有的服务都会将初始化的一些选项设定写入到这个目录下,举例来说,mandb 所要更新的man page索引中,需要加入的参数就写入到此目录下的man-db 当中喔!而网络的设定则写在/etc/sysconfig/network-scripts/ 这个目录内。所以,这个目录内的文件也是挺重要的;
  • /var/lib/:一些会产生数据的服务都会将他的数据写入到/var/lib/ 目录中。举例来说,数据库管理系统Mariadb 的数据库默认就是写入/var/lib/mysql/ 这个目录下啦!
  • /run/:放置了好多daemon 的暂存档,包括lock file 以及PID file 等等。

@systemd的unit的type分类

在这里插入图片描述

1.2 systemctl指令

systemctl的指令类型如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于服务而言,有预设状态和当前状态:

预设状态:

  • enabled:这个daemon 将在开机时被执行;
  • disabled:这个daemon 在开机时不会被执行;
  • static:这个daemon 不可以自己启动(enable 不可),不过可能会被其他的enabled 的服务来唤醒(相依属性的服务);
  • mask:这个daemon 无论如何都无法被启动!因为已经被强制注销(非删除)。可透过systemctl unmask 方式改回原本状态,使用systemctl mask (unit)指令强制注销,使用systemctl unmask (unit)解除注销;

当前状态:

  • active (running):正有一个或多个程序正在系统中执行的意思,举例来说,正在执行中的vsftpd 就是这种模式;
  • active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。通常用bash shell 写的小型服务,大多是属于这种类型(无须常驻内存);
  • active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。打印队列相关服务就是这种状态, 虽然在启动中,需要真的有队列进来(打印作业) 这样他才会继续唤醒打印机服务来进行下一步打印的功能;
  • inactive:这个服务目前没有运作;

注意:对于service类型的unit,启动/关闭使用start/stop/restart指令,对于target类型的unit,使用isolate的command;

1.3 Service类型配置文件的设定规则

  上面说到systemd的配置文件大部分放置于/usr/lib/systemd/system/目录中,但是官方指出,该目录文件主要是原软件提供的设置,修改service的配置,修改的位置应当为/etc/systemd/system/目录内。以vsftpd.service为例:

  • /usr/lib/systemd/system/vsftpd.service:官方释出的预设配置文件;
  • /etc/systemd/system/vsftpd.service.d/custom.conf:在/etc/systemd/system 底下建立与配置文件相同文件名的目录,但是要加上.d 的扩展名。然后在该目录下建立配置文件即可。另外,配置文件最好附档名取名为.conf较佳! 在这个目录下的文件会『累加其他设定』进入/usr/lib/systemd/system/vsftpd.service 内喔!
  • /etc/systemd/system/vsftpd.service.wants/*:此目录内的文件为链接档,设定相依服务的连结。意思是启动了vsftpd.service 之后,最好再加上这目录底下建议的服务。
  • /etc/systemd/system/vsftpd.service.requires/*:此目录内的文件为链接档,设定相依服务的连结。意思是在启动vsftpd.service 之前,需要事先启动哪些服务的意思。

对于.service文件,不论在/usr/lib/systemd/system/目录还是/etc/systemd/system/目录当中,作为配置文件能够分为三个部分:

  • [Unit]: unit 本身的说明,以及与其他相依daemon 的设定,包括在什么服务之后才启动此unit 之类的设定值;
  • [Service], [Socket], [Timer], [Mount], [Path]…:不同的unit type 就得要使用相对应的设定项目。这个项目内主要在规范服务启动的脚本、环境配置文件档名、重新启动的方式等等。
  • [Install]:该项目就是将此unit 安装到哪个target 里面去的意思;
  • 设定项目可以重复;
  • 设定参数是【是/否】的项目,使用1,yes, true, on代表启动,用0, no, false, off代表关闭;
  • 空白行、开头为 #; 的行,表示批注行

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

1.4 Timer类型配置文件的设定规则

  除了使用crond服务进行循环例程的设定,也可使用systemd服务中的timers.target操作环境来实现定期处理各种任务。使用systemd.timer的好处有:

  • 所有的systemd 的服务产生的信息都会被纪录(log),要比crond 在debug 上面要更清楚方便;
  • 各项timer 的工作可以跟systemd 的服务相结合;
  • 各项timer 的工作可以跟control group (cgroup,用来取代/etc/secure/limit.conf 的功能) 结合,以限制该工作的资源利用;

@使用systemd的timer功能,须满足以下条件:

  • 系统的timer.target 一定要启动;
  • 要有个sname.service 的服务存在(sname 是你自己指定的名称);
  • 要有个sname.timer 的时间启动服务存在;

@sname.timer的设定值

在这里插入图片描述在这里插入图片描述

2. 重点回顾

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yueguangmuyu/article/details/109367765