一、什么是.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