Linux基础——服务

服务是什么?

服务是常驻在内存中的程序,通常用于提供系统或网络功能,用于启动service的二进制文件称为daemon

init的服务管理

在Unix的system V版本中,启动服务的管理方式被称为SysV的init脚本程序处理方式,即系统核心第一个调用的程序为init,再由init调用其他服务

服务的开关和观察

所有服务启动脚本放置于 /etc/init.d

  • 启动:/etc/init.d/daemon start
  • 关闭:/etc/init.d/daemon stop
  • 重启:/etc/init.d/daemon restart
  • 观察:/etc/init.d/daemon status

服务的分类

  • stand alone:服务独立启动,并常驻在内存中
  • super daemon:由 xinetd或inetd 两个super daemon对socket、port管理,当有用户要求时才会去唤醒相对应的daemon,要求结束后服务也会结束

执行等级

init 根据用户的执行等级来调用不同的服务,从而进入不同的操作界面,等级为0-6,其启动脚本放置在 /etc/rc[0-6].d,连接到/init.d的daemon

,
命令 init [num] 可切换执行等级,其会自动启动 rc[0-6].d 的脚本

开机启动服务

根据上面,可知只要在 /etc/rc[0-6].d 下放置链接文件即可完成开机启动,也可使用如下命令

  • 开机启动:chkconfig daemon on
  • 取消开机启动:chkconfig daemon off
  • 查看是否开机启动:chkconfig --list daemon

systemd的服务管理

systemd将daemon统称为服务unit,每种服务依据功能区分为不同type

相关文件

  • /usr/lib/systemd/system:存放服务启动脚本
  • /run/systemd/system:系统执行过程中产生的服务脚本,优先比上面高
  • /etc/systemd/system:管理员依据系统需求所建立的脚本,优先级比上面高,这里面也是放置开机启动脚本的link文件

服务分类

后缀名功能
.service系统服务
.socket用于IPC(Inter-process communication)的传输信息,一般用于唤醒其他服务
.target用于执行一群服务的集合
.mount / .automount挂载相关服务
.path检查特定文件的服务,如打印服务
.timer循环执行的服务

利用systemctl管理服务

命令 systemctl [command] service用于统一管理服务

服务的开关

  • start / stop / restart:开/关/重启服务
  • reload:不关闭服务的情况下,重新载入设置文件
  • enalbe / disable:开机自启及取消
  • status:列出状态
  • is-active:判断是否在允许
  • is-enable:判断是否开机自启

如下 atd.service 状态enable表示可开机自启,状态active(running)表示正在运行

在这里插入图片描述

强制注销服务

如下,先关闭cup.service(该服务用于打印)

在这里插入图片描述
然后启动cup.socket

在这里插入图片描述
输出文字test用于打印,可看到cup.service被唤醒

在这里插入图片描述

服务具有相连性,cups.service会通过port 631来实现打印,但系统无需一直启动631端口,故多了一个cup.socket服务,这个服务用于监听端口,在用户有需要打印时会主动唤醒cups.service

解决办法是将cup.socket和cups.service一同关闭,或使用命令 mask 将cups.service注销

在这里插入图片描述
如上,使用mask后,cups.service无法再启动,取消注销则为unmask

服务的观察

命令 systemctl 默认加参数 list-units 列出已启动的服务,–all列出未启动的服务,list-unit-files 依据/usr/lib/systemd/system的文件进行解释,–type列出指定类型服务
在这里插入图片描述

  • UNIT:项目名称
  • LOAD:是否开机自启
  • ACTIVE SUB:状态
  • DESCRIPTION:描述

操作界面相关服务

systemd取消了原来执行等级的概念,转为使用不同的target操作环境

  • graphical.target:文件加图形界面
  • multi-user.target:文件界面
  • rescue.target:维护界面
  • emergency.target:救援界面,当上面无法使用时就用这个
  • shutdown.target:关机流程
  • getty.target:修改tty

命令 get-default 获取当前target,set-default设置默认target,isolate切换模式

在这里插入图片描述

服务相关性

命令 list-depencies即可列出当前服务的所使用的服务

在这里插入图片描述
如上可看到graphical.target用到multi-user.target,如下反向查找被哪些其他服务用到

在这里插入图片描述

服务介绍

可通过man systemd.service查看更具体介绍

在这里插入图片描述

Unit说明服务用途和相关性等:

  • Description:说明
  • Documentation:查询文件
  • After:在某服务启动之后才启动此服务(非强制)
  • Before:在某服务启动前启动此服务(非强制)
  • Requires:在某服务启动之后才启动此服务(强制)
  • Wants:在某服务启动之前才启动此服务(非强制)
  • Conflicts:存在冲突的服务

Service说明服务启动脚本、环境等:

参数说明
Typesimple:ExecStart指令启动并常驻内存
forking:由fork启动
oneshot:ExecStart指令启动但只执行一次
EnvironmentFile指定启动脚本的环境配置文件
ExecStart启动服务的指令或脚本
ExecStop关闭服务的指令或脚本
ExecReloadreload的指令或脚本
Restart为1时服务停止后会再次启动,如tty登出后会再启动tty用于登入
TimeoutSec服务无法正常启动或关闭时,等待多久进入强制结束状态
RestartSec服务重启时间

Install说明服务的target等:

  • WantedBy:后面接*.target,表示服务依附的target
  • Also:表示当服务被enable时,指定的服务也会enable
  • Alias:服务别名,如 systemctl set-default defalut.target相当于multi-user.target

制作Service

新建脚本backup.sh用于打包/etc

在这里插入图片描述

在/etc/systemd/system下新建back.service

在这里插入图片描述

接下来启动back.service,状态为inactive,因为脚本执行完并不会常驻内存,可看到生成了压缩包

在这里插入图片描述

制作timer

systemctl的timer也可实现定时执行的功能,可在/etc/systemd/system 下自定义 *.timer

参数意义
OnActiveSectimers.targer启动多久后执行
OnBootSec开机多久后执行
OnStartupSecsystemd第一次启动多久后执行
OnUnitActiveSec距离上一次启动多久后再执行
OnUnitInactiveSec距离上一次停止多久后再执行
OnCalendar使用实际时间启动,格式为week YYYY-MM-DD HH:MM:SS
Unit如果 .service和 .timer的名称不一样则需指定service
Persistent是否持续运行

现需要:

  • 开机后2小时执行/backup.service
  • 距第一次执行后,未来每两天都要执行一次/backup.service

在这里插入图片描述

如下,只需要启动back.timer

在这里插入图片描述

如下

  • 上一次执行backup.service的时间为2022-07-30 11:42:16
  • 两天后执行backup.service的时间为2022-08-1 11:42:16
  • 减去timer.target的时间2022-7-30 11:27:38
  • 得2d 14min

在这里插入图片描述

如果使用OnCalendar指定时间,则NextElapseUSecRealtime为距1970-01-01 00:00:00的时间

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值