Linux的.service服务 实现程序开机自启

一、.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 修改服务配置文件后需要重新加载服务

systemctl is-enabled 服务名 查询是否自启动服务

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值