概述
最近在部署一些web服务,有的是用python的flask框架写的,有的是用golang的beego框架写的。在部署过程中需要将这些服务变成自启动服务,且需要该服务具有启动失败或中断后能够自动重新启动的功能。当然之前很多人喜欢写个shell脚本来处理,但现在比较主流的方法是通过systemd来管理你的服务,就像系统服务一样,更加方便管理。原理不多说,本文以两个实例进行讲解,一个是通过systemd管理我的python web服务(使用gunicorn部署flask),另一个是管理go的web服务。下面先给出几个参考文档的连接,想进一步了解systemd可以去参照了解:
Centos7之Systemd(Service文件)详解
systemd实现python的守护进程
systemctl自定义systemd.service服务设置守护进程
1.部署flask服务
由于flask提供的WSGI性能很低只适合开发过程中使用,所以在生产环境需要使用高性能的WSGI(gunicorn是个不错的选择),如何使用gunicorn请参考这篇文章。首先贴出systemd的配置文件(flask_app.service):
[Unit]
Description=python web service(using gunicorn WSGI)
After=syslog.target network.target
[Service]
Type=forking
PIDFile=/home/centos/python_pro/log/gunicorn.pid
WorkingDirectory=/home/centos/python_pro/
ExecStart=/home/centos/anaconda3/bin/gunicorn -c ./gconfig.py run:app
Restart=on-failure
[Install]
WantedBy=multi-user.target
通过这个配置文件我们可以发现,systemd配置主要分为三个模块:
[Unit]启动顺序与依赖
Description就是个简单的服务介绍
After指的是本服务需要在某些服务启动后才能启动
[Service]启动行为
Type指的是启动类型,这个很重要,需要根据你启服务的方式决定,比如在gunicorn启动flask服务时,gunicorn是在子进程启动flask服务的,启完后主进程会退出(这里gunicorn的配置参数daemon=True即在后台运行),那么这里Type的就应该是forking,如果服务不是在子进程运行而是在主进程(即启动后主进程不会退出)那么Type就应该是simple。
PIDFile是指向gunicorn的管理进程PID保存的文件位置(这个保存位置也是在gunicorn的配置参数中指定的pidfile="./log/gunicorn.pid")
WorkingDirectory是指当前的工作目录,这里设置成你项目路径
ExecStart是启动服务所需的指令,这里就是直接通过gunicorn指令启动flask项目,其中gconfig.py是gunicorn的配置文件,flask启动文件是run.py,程序入口是app。
Restart是指在什么情况下重启服务,这里的on-failure是指一旦程序启动失败或被中断就进行重启。
RestartSec参数可以用来控制重启间隔时间
[Install]服务安装相关配置
WantedBy是指将该服务归于哪个服务组,在multi-user.target服务组的服务可以设置开机启动。
设置完成后我们需要将这个配置文件放到/etc/systemd/system/文件夹下(需要root权限),重载systemd
cp ./flask_app.service /etc/systemd/system/
systemctl daemon-reload
接下来启动服务
systemctl start flask_app.service
查看服务状态
systemctl status flask_app.service
关闭服务
systemctl stop flask_app.service
设置服务开机自启动
systemctl enable flask_app.service
2.部署golang服务
部署golang服务比部署python web服务要简单很多,运行golang程序就会自动编译出可执行文件(如果是在window下需要通过交叉编译方式编译下linux可执行文件),毕竟golang太强了。下面直接贴出go_app.service的配置文件。
[Unit]
Description=golang web application
After=syslog.target network.target
[Service]
Type=simple
WorkingDirectory=/home/centos/go_pro/
ExecStart=/home/centos/go_pro/web_service_amd64
Restart=on-failure
[Install]
WantedBy=multi-user.target
与第一个实例一样简单介绍写配置文件。
[Unit]启动顺序与依赖
Description就是个简单的服务介绍
After指的是本服务需要在某些服务启动后才能启动
[Service]启动行为
Type指的是启动类型,这个很重要,需要根据你启服务的方式决定,由于启动golang程序是在主进程中启动并执行的且不会退出,那么Type就应该是simple。
WorkingDirectory是指当前的工作目录,这里设置成你项目路径
ExecStart是启动服务所需的指令,直接执行golang编译好的二进制文件即可。
Restart是指在什么情况下重启服务,这里的on-failure是指一旦程序启动失败或被中断就进行重启。
RestartSec参数可以用来控制重启间隔时间
[Install]服务安装相关配置
WantedBy是指将该服务归于哪个服务组,在multi-user.target服务组的服务可以设置开机启动。
设置完成后我们需要将这个配置文件放到/etc/systemd/system/文件夹下(需要root权限),重载systemd
cp ./go_app.service /etc/systemd/system/
systemctl daemon-reload
接下来启动服务
systemctl start go_app.service
查看服务状态
systemctl status go_app.service
关闭服务
systemctl stop go_app.service
设置服务开机自启动
systemctl enable go_app.service
最后
以上就是坚定小蚂蚁为你收集整理的在centos7中使用systemd部署flask以及golang程序自启动1.部署flask服务2.部署golang服务的全部内容,希望文章能够帮你解决在centos7中使用systemd部署flask以及golang程序自启动1.部署flask服务2.部署golang服务所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复