美文网首页
Linux运维之走近系统服务

Linux运维之走近系统服务

作者: 慕长风啊 | 来源:发表于2019-04-03 09:08 被阅读0次

    daemon和service:

    翻译过来,daemon指的是守护进程,service是服务

    简单的说,系统为了某些功能必须要提供一些服务,即service

    但服务的提供通常需要程序的运作,所以达成这个service的程序我们就称之为daemon

    其中,daemon的命名也很有特点,通常是服务名称后面加上一个d

    例如我这里service docker start后可以看到:

    dockerd.png

    关于服务管理方式:

    早期启动系统服务的管理方式被称为SysV的init脚本程序的处理方式

    即系统核心第一支呼叫的程序是init,然后init去唤醒所有的系统所需要的服务

    所有的服务启动脚本都放置在/etc/init.d/底下:


    intitd.png

    但是自从CentOS 7.x之后,已经改成了Systemd这种启动服务管理机制

    因为前一方法有两个缺点:

    • 启动时间长: init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。

    • 启动脚本复杂: init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

    不过现在的版本依旧兼容于旧有的init的启动脚本

    接着讲讲现在是具体怎么进行服务管理的吧

    现在, systemd 将过去所谓的 daemon 执行脚本通通称为一个服务单位 (unit),而每种服务单位依据功能来区分时,就分类为不同的类型 (type)。

    基本的类型有包括系统服务(service)、数据监听与交换的插槽档服务 (socket)、储存系统状态的快照类型、提供不同类似执行等级分类的操作环境 (target) 等等。

    unit文件一般有三个存放位置,其配置文件优先级依次由低到高:

    • /lib/systemd/system
    • /run/systemd/system
    • /etc/systemd/system

    对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。

    如果想让某软件开机自启,就执行下面的命令:

    sudo systemctl enable serviced

    该命令相当于在/etc/systemd/system目录添加一个符号链接,指向其中的serviced.service文件

    因为开机时,systemd只执行该目录中的配置文件

    所以如果想修改配置文件,修改该目录文件,就可以覆盖原始配置

    跟以前systemV 需要 service / chkconfig / setup / init 等指令来协助不同

    基本上, systemd 这个启动服务的机制,主要是透过一只名为 systemctl 的指令来处理的

    对于单一服务的管理,例如:

    docker_status.png

    这里用法和service命令有点类似,中间接的command 主要有:

    start : 立刻启动后面接的
    unit stop : 立刻关闭后面接的
    unit restart : 立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思
    reload : 不关闭后面接的 unit 的情况下,重载配置文件,让设定生效
    enable : 设定下次开机时,后面接的 unit 会被启动
    disable : 设定下次开机时,后面接的 unit 不会被启动
    status : 目前后面接的这个 unit 的状态,会列出有没有正在执行、开机预设执行否、登录等信息
    is-active : 目前有没有正在运作中
    is-enable : 开机时有没有预设要启用这个 unit
    

    如果想要观察系统上所有服务,直接systemctl就好了

    如果只是想知道service这种类别的daemon呢,加个参数就好了“--type=service”

    还有一个比较有意思的就是透过 systemctl 管理不同的操作环境

    其中跟操作界面相关性比较高的target 主要有底下几个:

    graphical.target: 就是文字加上图形界面,这个项目已经包含了底下的 multi-user.target 项目
    multi-user.target: 纯文本模式!
    rescue.target: 在无法使用 root 登入的情况下,systemd 在开机时会多加一个额外的暂时系统,与你原本的系统无关。这时你可以取得 root 的权限来维护你的系统。 但是这是额外系统,因此可能需要动到 chroot 的方式来取得你原有的系统
    emergency.target: 紧急处理系统的错误,还是需要使用 root 登入的情况,在无法使用rescue.target 时,可以尝试使用这种模式!
    shutdown.target: 就是关机的流程 
    getty.target: 可以设定你需要几个 tty 之类的,如果想要降低 tty 的项目,可以修改这个东西的配置文件
    

    比如我们可以先看看自己机器的默认界面是什么:


    graphical.png

    显然是图形界面

    如果想改成文本界面呢?

    systemctl isolate multi-user.target

    这里我就不试了,之前用init 3切到纯文本模式后正在写的报告就全没了 - -

    在正常的切换情况下,使用上述 isolate 的方式即可。

    不过为了方便起见, systemd 也提供了数个简单的指令给我们切换操作模式之用,大致上如下所示:

    commands.png
    顺便解释一下暂停模式休眠模式的区别:
    • suspend: 暂停模式会将系统的状态数据保存到内存中,然后关闭掉大部分的系统硬件,当然,并没有实际关机, 当用户按下唤醒机器的按钮,系统数据会重内存中回复,然后重新驱动被大部分关闭的硬件,就开始正常运作,唤醒的速度较快。

    • hibernate: 休眠模式则是将系统状态保存到硬盘当中,保存完毕后,将计算机关机。当用户尝试唤醒系统时,系统会开始正常运作, 然后将保存在硬盘中的系统状态恢复回来。因为数据是由硬盘读出,因此唤醒的效能与你的硬盘速度有关。

    自此,我每次关机都改成了systemctl hibernate :)

    对了,最后补充一下关于日志管理一块儿

    程序运行出错时经常提示我们用journalctl命令来查看日志

    这就是Systemd统一管理Unit的启动日志所带来的好处,一个命令便可以查看所有日志

    配置文件在这里:/etc/systemd/journald.conf

    其功能十分强大,具体可以Google一下或者man一下

    最后想补上一句:

    Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。事实上,现在还有很多人反对使用 Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的Unix哲学。(出自阮一峰)

    相关文章

      网友评论

          本文标题:Linux运维之走近系统服务

          本文链接:https://www.haomeiwen.com/subject/vxywbqtx.html