目录
Systemctl Service Template
在使用go开发linux系统服务时,经常需要把执行文件安装为linux系统服务,每次都要搜文档再写service文件。特此准备了一个service文件的模板,修改前面的定义的几个变量即可。
主程序控制脚本模板
apisrv.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
| #!/bin/sh
#
#
## chkconfig: 2345 67 92
## description: minio service
#执行程序启动所使用的系统用户
RUNNING_USER=root
###################################
#环境变量及程序执行参数
###################################
APP_EXE_NAME=xxxx
APP_NAME=xxxxx
APP_HOME=/data/xxxxxxxx
APP_BIN=${APP_HOME}/${APP_EXE_NAME}
DATA_DIR=${APP_HOME}/data
LOGFILE=${APP_HOME}/logs/${APP_NAME}.log
START_CMD="nohup ${APP_BIN} > ${LOGFILE} 2>&1 &"
#初始化psid变量(全局)
psid=0
checkpid() {
pidps=`ps -ef|grep ${APP_EXE_NAME}|grep -v grep`
if [ -n "${pidps}" ]; then
psid=`echo ${pidps} | awk '{print $2}'`
else
psid=0
fi
}
###################################
#(函数)启动程序
###################################
start() {
checkpid
if [ ${psid} -ne 0 ]; then
echo "================================"
echo "warn: ${APP_NAME} already started! (pid=${psid})"
echo "================================"
else
echo -n "Starting ${APP_NAME}, data path: ${DATA_DIR} ..."
su - ${RUNNING_USER} -c "${START_CMD}"
checkpid
if [ ${psid} -ne 0 ]; then
echo "(pid=$psid) [OK]"
else
echo "[Failed]"
fi
fi
}
###################################
#(函数)停止程序
###################################
stop() {
checkpid
if [ ${psid} -ne 0 ]; then
echo -n "Stopping ${APP_NAME} ...(pid=${psid}) "
su - ${RUNNING_USER} -c "kill -9 ${psid}"
if [ $? -eq 0 ]; then
echo "[OK]"
else
echo "[Failed]"
fi
checkpid
if [ ${psid} -ne 0 ]; then
stop
fi
else
echo "================================"
echo "warn: ${APP_NAME} is not running"
echo "================================"
fi
}
###################################
#(函数)检查程序运行状态
###################################
status() {
checkpid
if [ ${psid} -ne 0 ]; then
echo "${APP_NAME} is running! (pid=${psid})"
else
echo "${APP_NAME} is not running"
fi
}
###################################
#读取脚本的第一个参数($1),进行判断
#参数取值范围:{start|stop|restart|status}
#如参数不在指定范围之内,则打印帮助信息
###################################
case "$1" in
'start')
start
;;
'stop')
stop
;;
'restart')
stop
start
;;
'status')
status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
|
systemd service模板
apisrv.service
1
2
3
4
5
6
7
8
9
10
11
12
| [Unit]
Description=A spider for bbc 6m english.
[Service]
WorkingDirectory=/dataxxx
ExecStartPre=
ExecStart=/data/xxx/apisrv.sh start
ExecReload=/data/xxx/apisrv.sh restart
ExecStop=/data/code/xxx/apisrv.sh stop
[Install]
WantedBy=multi-user.target
|
使用方法
复制上方的模板,保存为你想要的名称,比如apisrv.service,然后按以下步骤处理
1
2
3
4
| chmod +x apisrv.service
sudo cp apisrv.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable apisrv.service
|
如果你想不重启立刻使用这个sh脚本,就运行下面这句:
1
2
| ## 重启相关服务
$ sudo systemctl start apisrv.service
|