配置自定义服务为linux系统服务

发布时间 2023-10-19 09:50:58作者: ilovetesting

背景

使用go语言写了一个测试环境部署上报的备份服务,以防因为主服务挂了影响部署操作。

 想把这个 backup 服务设置了系统服务,如果因环境重启等异常,可以自动重启

使用的环境的Centos7

1、首先需要创建一个systemd unit存储配置文件

[Unit]
Description=deploy report backup servce

[Service]
Type=forking
ExecStart=/opt/deploy-report/deploy-report.sh start
#ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/opt/deploy-report/deploy-report.sh stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

2、将上面配置放在指定目录下

RHEL系列service服务文件存放在/usr/lib/systemd/system目录

Debian系列service服务文件存放在/lib/systemd/system/目录下,这个目录有系统自带的服务文件和安装的软件包提供的服务文件

我的是Centos系统,所以放在了/usr/lib/systemd/system/deploy-report.service文件里面

3、加载配置文件

unit文件编写完成并放在指定目录下,需要执行systemctl daemon-reload命令重新加载配置文件,让系统知道有新的服务文件了

4、启动服务
systemctl start deploy-report.service
5、停止服务
systemctl stop deploy-report.service
6、开机自启动
systemctl enable deploy-report

 

在操作过程遇到的几个问题

1、启动卡死

在unit配置文件中的启动命令ExecStart刚开始是直接使用的执行go编译的二进制文件

ExecStart=/opt/deploy-report/deploy-report

 执行systemctl start deploy-report.service后发现一直卡在命令行无法退出,猜想是因为直接执行deploy-report启动是一个web服务,会一直处于listen状态,导致一直卡住

于是编写了一个启动脚本

ExecStart修改为 ExecStart=/opt/deploy-report/deploy-report.sh start

重新执行systemctl start deploy-report.service后发现报错,不卡了,直接执行脚本是可以运行的

2、启动失败status=203

通过下面命令查看报错情况 systemctl status deploy-report.service

 

 status=203,网上一番搜索找到

 于是在脚本上加上#!/bin/sh,重新运行,成功启动