一、什么是.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/下的。

# 开启
service mysqld start

# 关闭
service mysqld stop

# 重启
service mysqld restart

三、内容介绍

[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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐