linux系统中service 文件详细介绍
1、.service 文件介绍
在 CentOS 7 及更高版本中,systemd 是默认的初始化系统和服务管理器。.service
文件是 systemd 的单元配置文件,用于定义服务的启动、停止、依赖关系等行为。通过编写 .service 文件,可以将自定义服务集成到系统服务管理中,并实现开机自启动。
2、 .service 文件核心组成部分
1. [Unit]
描述服务的基本信息和依赖关系:
Description:服务的描述信息。可以是任意字符串,用于描述服务。
After:定义服务启动的依赖条件。
network.target 表示在网络就绪后启动。
network-online.target: 表示网络完全就绪(需 NetworkManager-wait-online.service 支持)。
syslog.target:表示系统日志服务就绪。
postgresql.service:表示依赖其他服务(如数据库)。
可以定义多个依赖,以空格分隔
比如:After=network.target postgresql.service
2. [Service]
定义服务的运行参数:
Type:进程类型(常见值:simple、forking)
类型 | 描述 |
---|---|
simple | 默认值,主进程由 ExecStart 启动且不后台化(适用于前台程序)。 |
forking | 服务启动后会派生到后台(需配合 PIDFile 指定 PID 文件)。 |
oneshot | 进程退出后服务视为完成(适合执行一次性任务,如初始化脚本)。 |
dbus | 服务通过 D-Bus 激活(如桌面应用通信)。 |
notify | 服务通过 sd_notify 发送 READY=1 信号告知启动完成(需程序支持)。 |
User 和 Group:运行服务的用户和组。应避免使用 root, 建议创建专用用户
ExecStart:启动服务的命令。
WorkingDirectory:服务的工作目录。
RestartSec: 服务退出后等待指定时间再重启,避免频繁重启导致系统负载过高。(5s、1min、2h 30min 等时间单位组合。)
Restart:定义服务退出后的重启策略
策略 | 描述 |
---|---|
no | 不重启(默认值)。 |
always | 无论退出状态码如何都重启。 |
on-failure | 仅在非正常退出(状态码非 0)时重启(推荐)。 |
on-abnormal | 仅在因信号终止或超时时重启。 |
on-abort | 仅在未正常终止(如 SIGABRT)时重启。 |
on-watchdog | 仅在看门狗超时时重启(需配置 RuntimeWatchdogSec)。 |
3. [Install]
定义服务的安装位置和启动目标:
WantedBy:定义服务关联的 Systemd 目标(target)。
目标 | 描述 |
---|---|
multi-user.target | 多用户命令行模式(CentOS 7 默认运行级别 3)。 |
graphical.target | 图形界面模式(运行级别 5)。 |
default.target | 系统默认目标(通常是 multi-user.target 或 graphical.target)。 |
以上配置的示例:
[Unit] # 定义服务单元的通用信息和依赖关系
Description=Minecraft Server # 描述性的文本,用于简要说明该服务的作用
After=network.target mysqld.service # 定义了服务的启动顺序。network.target 代表网络服务单元,这意味着该服务会在网络服务和数据库服务启动之后再启动,以确保该服务在启动时网络和数据库已经可用
[Service] # 配置服务的具体运行方式和参数
Type=simple # 服务的启动类型
User=root # 指定服务以哪个用户的身份运行
Group=root # 指定服务以哪个用户组的身份运行
WorkingDirectory=/home/zzq/server # 定义服务启动时的工作目录,后续的jar包在这个路径下
ExecStart=/usr/bin/java -Xmx4G -Xms1G -jar server.jar nogui # 服务启动时要执行的命令,/usr/bin/java 表示 java 程序的绝对路径,-Xmx4G 表示 Java 虚拟机最大可用内存为 4GB,-Xms1G 表示 Java 虚拟机初始分配的内存为 1GB,-jar server.jar 用于执行 server.jar 文件,nogui 表示以无图形界面的方式启动服务
Restart=on-failure # 指定了服务在什么情况下会自动重启。on-failure 表示当服务以非零退出状态码退出时,systemd 会自动尝试重启该服务。
RestartSec=10s # 定义服务重启前的等待时间。这里设置为 10 秒,意味着服务在失败后会等待 10 秒再尝试重启。
[Install] # 配置服务的安装信息,即服务如何被激活
WantedBy=multi-user.target # 服务在哪些目标(target)下会被激活
3、多个服务先后启动(可选)
使用 systemctl add-wants 和 systemctl remove-wants 命令可以手动添加或删除服务的依赖关系
查看服务的依赖关系:systemctl list-dependencies wvp.service
添加或删除依赖关系:
让 Apache 在 MySQL 服务之后启动
systemctl add-wants httpd.service mysql.service
mysql先启动,wvp再启动,zl后启动
systemctl add-wants wvp.service mysqld.service
systemctl add-wants zl.service wvp.service