Linux基础学习笔记-系统服务

前言

认识Linux的daemon

Linux系统服务

什么是daemon与service

服务,顾名思义:常驻内存中的进程,且可以提供一些系统或网络功能,就是服务,称为service

在UNIX-like的系统中,常看到启动某某daemon来提供某某功能,daemon为何物?

系统为了某些功能必须要提供一些服务,这个服务就称为service。但是service的提供总是需要程序的运行,所以完成这个service的程序就被称为daemon,被称为守护进程,是一种在后台执行的电脑程序,即使关闭shell终端,守护进程也会继续运行。

init管理机制

早期的unix纯净版本system v启动系统服务的方式被称为sysv的init脚本程序处理方式,系统内核的第一个调用的程序是init,然后init去运行所有系统需要的服务

  • 服务的启动,关闭和查看

    所有的服务启动脚本都放在/etc/init.d/目录中,基本都是bash shell写的脚本

    启动:/etc/init.d/daemon start

    关闭:/etc/init.d/daemon stop

    重新启动:/etc/init.d/daemon restart

    查看状态:/etc/init.d/daemon status

  • 服务启动的分类

    init的服务分类根据服务是独立启动还是被一个总管程序管理而分成两类

    独立启动模式:服务独立启动,该服务常驻内存中,提供本机或者用户的服务操作

    超级守护进程:由特殊的xinetd和inetd两个总管程序提供socket对应或端口对应的管理,只有用户有需求时,xinetd才回去唤醒对应的服务进程。当该要求结束时,此服务也会结束

  • 服务的依赖性

    服务可能会有依赖性,比如要去启动网络服务,但是系统没有网络,这时候就不可能唤醒网络服务。init在管理员自己手动处理这些服务时是没有办法唤醒以来服务的

  • 运行级别

    init可以根据用户自定义的运行级别来唤醒不同的服务,总共七个级别0-6,重要的是:1.单人维护模式,3.纯命令行模式,5.图形界面

  • 制定运行级别和默认要启动的服务

  • 通过下面的命令来处理默认启动、默认不启动,查看默认启动

    1
    2
    3
    chkconfig daemon on 默认要启动
    chkconfig daemon off 默认不启动
    chkconfig --list daemon 查看默认为启动与否

systemd管理机制

  • 并行处理所有服务,加速开机流程

    旧的init启动脚本是一项一项任务依序启动的模式,不依赖的服务也需要一个一个等待。systemd可以让所有的服务同时启动

  • 仅仅有一个systemd搭配一个systemctl命令来处理

    systemd常驻内存,对任何要求都是立即处理后续的daemon启动任务

  • 服务依赖性的自我检查

    b服务hi架构在a上面的服务,当你在没有启动a的时候就启动b,systemd就会自己帮你启动a

  • 依据daemon功能分类

    service,socket,target,path,snapshot,timer

  • 向下兼容init服务脚本

M2Af3Q.png

通过systemctl管理服务

systemd这个启动服务的机制,主要是通过一个名为systemctl的命令来完成的。和以前sysv需要service、chkconfig、init、setup协助不同,systemd只需要systemctl这一个命令来处理。

单一服务启动/开机启动/查看状态

一般来说服务的启动有两个阶段:

  1. 开机的时候是否需要设置为自启动
  2. 你现在要不要启动这个服务
1
2
3
4
5
6
7
8
9
10
systemctl [cmd] [unit]
start 开启
stop 关闭
restart 重启
reload 不关闭后边的unit,重新加载配置文件,使设置生效
enable 设置开机时,后面的unit被启动
disable 设置开机时,后边的unit不被启动
status 目前后面的unit状态,列出有没有在执行,开机是否自启,登录信息等
is-active 目前是否运行
is-enable 开机时有没有默认启动这个unit

实例:

1
2
3
4
5
6
7
8
9
10
11
[gard3nia@localhost ~]$ systemctl status sshd.service
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2019-11-15 22:27:56 EST; 24h ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1171 (sshd)
CGroup: /system.slice/sshd.service
└─1171 /usr/sbin/sshd -D

Nov 15 22:27:56 localhost sshd[1171]: Server listening on :: port 22.
  1. loaded表示开机是否会自启,enabled表示自启,disabled相反
  2. active表示现在这个unit是否在运行状态
  3. 后面就是进程PID和一些日志

查看系统上的所有服务

系统上到底有多少个服务存在:

1
2
3
4
systemctl [cmd] [--type=TYPE] [--all]
list-units 依据unit来显示目前有启动的unit,加上--all才会列出没启动的
list-unit-files 依据/usr/lib/systemd/system/内的文件,将所有的文件列表说明
--type=TYPE unit类型,service,socket,target等

管理不同的操作环境

MgOVje.png

和操作界面相关性比较高的就是下面几个:

MgO8gS.png

正常模式是graphical.target和multi-user.target两个,恢复方面就是rescue和更紧急的emergency,那么如何获得当前的模式呢?

MgXuMF.png

分析个服务之间的依赖性

1
systemctl list-dependencies

MgXJG6.png

systemd的daemon运行过程相关的目录简介

MgjO9P.png

网络服务和端口对应简介

IP相当于在internet上的门牌号,但是一个主机连接外网的时候往往只有一个IP,所以还需要规定端口号来辨别不同的服务请求。

举例:网址中的http会让浏览器向WWW服务器的80端口发送连接请求,而WWW服务器也会将httpd这个软件监听80端口,这样两者才会完成连接。

通过cat /etc/services可以查看当前服务和端口的对应关系

Author: Gard3nia
Link: https://gardenia30.top/2019/11/19/Linux基础学习笔记-系统服务/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.