一、.service文件的位置
所有可用的单元文件存放在 /lib/systemd/system/ 和 /etc/systemd/system/ 目录。
我们需要在/lib/systemd/system/ 下存放.service文件,当systemctl enable @@@.service 设置了自启动后,会自动在 /etc/systemd/system/ 下创建一个软链接指向 /lib/systemd/system/ 下的文件。
通过服务状态可以查看启动服务的.service配置文件
例如:
service mysql status
可以看到:
mysql.service - MySQL Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since 一 2023-03-13 17:24:06 UTC; 22h ago
Process: 1783 ExecStart=/opt/mysql/mysql_ctl.sh start (code=exited, status=0/SUCCESS)
Main PID: 1799 (mysqld_safe)
二、.service的内容
.service 文件通常包含3个模块:
[Unit] 控制单元,表示启动顺序和依赖关系。
[Service] 服务,表示服务的定义。
[Install] 安装,表示如何安装配置文件。
例如:MySQL开机自启服务
[Unit]
Description=MySQL Daemon Service (服务描述)
After=network-online.target (服务依赖,再这些服务后启动本服务)
Before=nss-lookup.target (服务依赖,再这些服务前启动本服务)
Wants=network-online.target nss-lookup.target (与当前服务配合的其他服务,如果它们没有运行,当前服务不会启动失败)
[Service]
Type=simple (默认值,systemd认为该服务将立即启动)
ExecStart=/opt/mysql/bin/MySQL_Service (启动当前服务的命令)
ExecStop=/bin/kill -SIGINT $MAINPID (停止当前服务时执行的命令)
Restart=on-failure (定义何种情况 Systemd 会自动重启当前服务,当前是仅在服务进程异常退出时重启)
RestartSec=3s (自动重启当前服务间隔的秒数)
User=root (设置进程在执行时使用的用户,当前是root)
[Install]
WantedBy=multi-user.target (表示该服务所在的服务组,当前是服务所在的服务组是multi-user.target)
PS:要注意的是ExecStart指定的是一个阻塞的程序,不需要后台执行,如果不阻塞,服务会认为程序执行完了,认为服务不在启动状态。
三、设置服务开机自启
1、将.service文件放到/lib/systemd/system/后,使用systemctl enable mysql.service命令用于设置开机自启服务
2、验证手动启、开机自启
使用systemctl start mysql.service命令,启动mysql服务,此时可以查看MySQL_Service有没有在后台运行:ps -aux | grep MySQl_Service
如果程序能后台启动了,那么就可以重启系统检验一下程序有没有开机自启。
四、service相关命令
systemctl start 服务名 开启服务
systemctl stop 服务名 关闭服务
systemctl status 服务名 显示状态
systemctl restart 服务名 重启服务
systemctl enable 服务名 开机启动服务
systemctl disable 服务名 禁止开机启动
systemctl daemon-reload 修改服务配置文件后需要重新加载服务文章来源:https://uudwc.com/A/jeJe
systemctl is-enabled 服务名 查询是否自启动服务文章来源地址https://uudwc.com/A/jeJe