Yan.G WebServer Dev Engineer

守护进程


守护进程

以 beego 项目作为切入点(有模板,有服务)

  • https://github.com/nelsonking/app-publish
  • 该项目是一个 公司内测使用的发布平台 支持 Android 和 iOS 应用

systemctl 守护进程

## *.servic 名称即为最终守护进程的名称 例如下文的守护进程名称为 app-publish
cat /usr/lib/systemd/system/app-publish.service


[UNIT]
#服务描述
Description=app publish for test

#指定了在systemd在执行完那些target之后再启动该服务
After=network.target

[Service]
# 默认类型,始终守护 app-publish 进程
Type=simple

#定义systemctl start|stop|reload *.service 的执行方法(具体命令需要写绝对路径)
#注:ExecStartPre为启动前执行的命令

# 工作目录,这个定义的作用在于项目模板等寻址文件,守护进程的默认工作目录为 / ,在这个目录下是找不到项目中的模板的,所以需要指定 
WorkingDirectory=/data/www/qjyedu-app-publish
# 启动命令
ExecStart=/data/www/qjyedu-app-publish/app-publish
# 停止命令
ExecStop=ps -ef | grep app-publish| grep -v 'grep'| grep -v 'nohup' | awk '{print $2}' | xargs -I {} bash -c 'if test "{}" -ne 0; then kill -9 {}; fi'

#创建私有的内存临时空间
PrivateTmp=True

[Install]
#多用户
WantedBy=multi-user.target

检查并启动服务

## 挂载服务
sudo systemctl daemon-reload

## 检查服务是否存在
systemctl list-unit-files|grep app-publish

## 启动
systemctl start app-publish

## 设置开机启动
systemctl enable app-publish

supervisor 守护进程

## 守护进程名称
[program:app-publish]
## 启动命令
command=/Users/nelsonking/Code/go/src/qjyedu-app-publish/app-publish
## 工作目录,这个定义的作用在于项目模板等寻址文件,守护进程的默认工作目录为 / ,在这个目录下是找不到项目中的模板的,所以需要指定
directory=/Users/nelsonking/Code/go/src/qjyedu-app-publish
## 输出日志文件
strout_events_enable=true
strerr_events_enable=true

检查并启动服务

supervisor
-> 
update
-> 
status
-> 检查是否含有 app-publish

start app-publish

pm2 守护进程

pm2 start /data/www/qjyedu-app-publish/app-publish --cwd /data/www/qjyedu-app-publish --name app-publish
  • –cwd 可以指定具体的工作目录,但是实际使用并未生效,工作空间并未生效,使用时需要注意

Content