Linux的系统服务(daemons)

根据扩展名的类型, 我们大概可以找到几种比较常见 的 systemd 的服务类型如下:

扩展名主要服务功能
.service一般服务类型 (service unit):主要是系统服务,包括服务器本身所需要 的本机服务以及网络服务都是!比较经常被使用到的服务大多是这种类 型! 所以,这也是最常见的类型了!
.socket内部程序数据交换的插槽服务 (socket unit):主要是 IPC (Interprocess communication) 的传输讯息插槽档 (socket file) 功能。 这种 类型的服务通常在监控讯息传递的插槽档,当有通过此插槽档传递讯息来 说要链接服务时,就依据当时的状态将该用户的要求传送到对应的 daemon, 若 daemon 尚未启动,则启动该 daemon 后再传送用户的要 求。使用 socket 类型的服务一般是比较不会被用到的服务,因此在开机时 通常会稍微延迟启动的时间 (因为比较没有这么常用嘛!)。一般用于本 机服务比较多,例如我们的图形界面很多的软件都是通过 socket 来进行本 机程序数据交换的行为。 (这与早期的 xinetd 这个 super daemon 有部份 的相似喔!)
.target执行环境类型 (target unit):其实是一群 unit 的集合,例如上面表格中 谈到的 multi-user.target 其实就是一堆服务的集合~也就是说, 选择执行 multi-user.target 就是执行一堆其他 .service 或/及 .socket 之类的服务就是 了!
.mount .automount文件系统挂载相关的服务 (automount unit / mount unit):例如来自网络 的自动挂载、NFS 文件系统挂载等与文件系统相关性较高的程序管理。
.path侦测特定文件或目录类型 (path unit):某些服务需要侦测某些特定的目 录来提供伫列服务,例如最常见的打印服务,就是通过侦测打印伫列目录 来启动打印功能! 这时就得要 .path 的服务类型支持了!
.timer循环执行的服务 (timer unit):这个东西有点类似 anacrontab 喔!不过 是由 systemd 主动提供的,比 anacrontab 更加有弹性!

一、通过 systemctl 管理服务。

1、通过 systemctl 管理单一服务 (service unit) 的启动/ 开机启动与观察状态

一般来说,服务的启动有两个 阶段,一个是“开机的时候设置要不要启动这个服务”, 以及“你现在要不要启动这个服务”。

语法格式:systemctl [command] [unit]

command 主要有:

start :立刻启动后面接的 unit

stop :立刻关闭后面接的 unit

restart :立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思

reload :不关闭后面接的 unit 的情况下,重新载入配置文件,让设置生效

enable :设置下次开机时,后面接的 unit 会被启动

disable :设置下次开机时,后面接的 unit 不会被启动

status :目前后面接的这个 unit 的状态,会列出有没有正在执行、开机默认执行否、登录等信息等!

is-active :目前有没有正在运行中 is-enable :开机时有没有默认要启用这个 unit

eg1:看看目前 atd 这个服务的状态为何?

eg2:正常关闭这个 atd 服务。

除了 running 跟 dead 之外,基本上还有几个常见的状态:

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

既然 daemon 目前的状态就有这么多种了,那么 daemon 的默认状态有没有可能除了 enable/disable 之外,也还有其他的情况:

  • enabled:这个 daemon 将在开机时被执行
  • disabled:这个 daemon 在开机时不会被执行
  • static:这个 daemon 不可以自己启动 (enable 不可),不过可能会被其他的 enabled 的服务来唤醒 (相依属性的服务)
  • mask:这个 daemon 无论如何都无法被启动!因为已经被强制注销 (非删除)。可通过 systemctl unmask 方式改回原本状态
  1. 服务启动/关闭与观察的练习

eg1:因为我根本没有打印机安装在服务器上,目前也没有网络打印机,因此我想要将 cups 服务整个关闭。

上面这个范例让你了解到,很多服务彼此之间是有相依性的!cups 是一种打印服 务,这个打印服务会启用 port 631 来提供网络打印机的打印功能。 但是其实我们无须一直启动 631 端口吧?因此,多了一个名为 cups.socket 的服务,这个服务可以在“用户有需要打印时,才会主动唤醒 cups.service ”的意思! 因此,如果你仅是 disable/stop cups.service 而忘 记了其他两个服务的话,那么当有用户向其他两个 cups.path, cups.socket 提出要求时, cups.service 就会被唤醒!所以,你关掉也没用!

  2. 强迫服务注销 (mask) 的练习

上面那个范例正规方法是把有相依性的服务也一起关了,比较不正规的作法是通过 mask 的方式,那就强迫 cups.service 注销。

2、通过 systemctl 观察系统上所有的服务。

要观察系统上面有多 少的服务存在,这个时候就得要通过 list-units 及 list-unit-files 来观察了。

语法格式:systemctl [command] [--type=TYPE] [--all]

command:

        list-units :依据 unit 列出目前有启动的 unit。若加上 --all 才会列出没启动的。

        list-unit-files :依据 /usr/lib/systemd/system/ 内的文件,将所有文件列表说明。

--type=TYPE:就是之前提到的 unit type,主要有 service, socket, target 等

eg1:列出系统上面有启动的 (unit) 项目。

eg2:列出所有已经安装的 unit 有哪些?

eg3:查询系统上是否有以 cpu 为名的服务?

3、通过 systemctl 管理不同的操作环境 (target unit)

语法格式:systemctl [command] [unit.target]

选项与参数:

command:

        get-default :取得目前的 target

        set-default :设置后面接的 target 成为默认的操作模式

        isolate :切换到后面接的模式

eg1:我们的测试机器默认是图形界面,先观察是否真为图形模式,再将默认模式转为文字界面

eg2:在不重新开机的情况下,将目前的操作环境改为纯文本模式,关掉图形界面

eg3:若需要重新取得图形界面呢?

4、通过 systemctl 分析各服务之间的相依性。

语法格式:systemctl list-dependencies [unit] [--reverse]

选项与参数: --reverse :反向追踪谁使用这个 unit 的意思!

eg1:如果要查出谁会用到 multi-user.targe

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值