• 总结:linux之Service


    一、什么是.service文件?

    Linux中.service文件是某项服务对应的配置文件,可用于systemd管理和控制的服务的设置。

    比如我们的firstrun.service文件:

    .service 文件通常包含3个模块,即:

    [Unit]:表示启动顺序和依赖关系;

    [Service]:服务的启动行为以及如何启动、重启、停止等信息

    [Install]:表示如何安装配置文件。

    二、如何管理?

    .service 文件配置的服务常用systemd管理

    然而,systemd有系统和用户区分;系统(/user/lib/systemd/system/)、用户(/etc/lib/systemd/user/)。

    一般系统管理员手工创建的单元文件建议存放在/etc/systemd/system/目录下面。

    我们的firstrun是放在/user/lib/systemd/system/下的。

    三、内容介绍

    [Unit]

    作用:主要给出服务描述、启动顺序和依赖关系

    Description:当前服务的简单描述。
    Documentation:服务文档
    After和Before:表示启动顺序,不涉及依赖关系。

    • Before=xxx.service表示本服务在xxx.service 启动之前启动
    • After=yyy.service表示本服务在yyy.service 之后启动。
    • 所以我们firstrun服务配置表示是在network.target之后启动。

    Wants:表示该服务和某服务存在某种弱依赖关系,即某服务停止运行或退出不影响该服务继续运行。
    Requires:表示”强依赖”关系,即某服务停止运行或退出,改服务也必须停止运行。
    Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。

    [Service]

    作用:服务的启动行为以及如何启动、重启、停止等信息

    ExecStart:指定启动服务的命令或者脚本。

    • [Service]
      ExecStart=/usr/lib/systemd/firstrun 
    • firstrun配置表示由/usr/lib/systemd/firstrun脚本启动服务。

    ExecStop:指定单元停止时执行的命令或者脚本。

    Restart:这个选项如果被允许,服务重启的时候进程会退出,会通过systemctl命令执行清除并重启的操作。

    [Install]

    作用:如何安装这个配置文件,即怎样做到开机自启
    WantedBy字段:表示该服务所在的 Target。
    Target的含义是服务组,表示一组服务。


    WantedBy=multi-user.target指的是服务所在的Target是multi-user.target

    Systemd 有默认的启动 Target就是multi-user.target,在这个组里的所有服务,都将开机启动

    四、配置开机启动

    1、在“/etc/init.d”目录下添加自启动脚本(Service管理)。

    • service命令原理:是去/etc/init.d/目录下,去执行相关程序脚本
    • 其实目录 /etc/init.d 是符号链接文件,实际上是链接到目录 /etc/rc.d/init.d
    • service管理是一种传统方式,即在/etc/rc.d/init.d下写脚本是一种老的方式,当前比较新的方式是systemctl,即在如下目录写脚本:/etc/systemd/system/multi-user.target.wants。

    2、在“/etc/rc.local”文件中添加自启动命令“/usr/./hello.sh”或“cd /opt && ./hello.sh”。

    3、将脚本放入:/etc/systemd/system/multi-user.target.wants(systemctl管理

    我们进入/etc/systemd/system/multi-user.target.wants看下:看到了很多我们熟悉的服务,这些服务都是开机自动启动。

    五、service和systemctl

    Linux 服务管理两种方式service和systemctl

    systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。

    systemd是Linux系统最新的初始化系统,对应的进程管理命令是systemctl

    systemctl命令兼容了service,即systemctl也会去/etc/init.d目录下,查看,执行相关程序

    systemctl实际上将 service 和 chkconfig 这两个命令组合到一起。

    Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在/usr/lib/systemd/system/目录。

    systemctl enable命令用于设置开机自启,原理其实就是在上面两个目录之间,建立符号链接关系。即会在/etc/systemd/system/multi-user.target.wants/目录下新建一个/usr/lib/systemd/system/docker.service 文件的链接

    systemctl命令脚本存放在/usr/lib/systemd/目录下,也兼容了service, 即也会去/etc/init.d目录下查看执行相关程序,所以systemctl命令会查看两个目录。

    systemctl两个主要目录:

    /usr/lib/systemd/system/firstrun.service:service目录

    /usr/lib/systemd/firstrun:一般放置真实的启动脚本

    启动http服务:systemctl start httpd
    设置开机自启:systemctl enable httpd

  • 相关阅读:
    Unity的碰撞检测(五)
    芋道商城,基于 Vue + Uniapp 实现,支持分销、拼团、砍价、秒杀、优惠券、积分、会员等级、小程序直播、页面 DIY 等功能
    奥威BI系统,BI界便宜大碗国货
    LeetCode 11. 盛最多水的容器
    02 uniapp/微信小程序 项目day02
    植物大战僵尸各种僵尸攻略
    教你用Python 实现自动导入缺失的库
    BGP路径属性
    linux中怎么用shell逐行读取文件
    一键部署k8s集群
  • 原文地址:https://blog.csdn.net/w2009211777/article/details/125489179