赞
踩
前言:由于项目需求,要求将本地的python程序提供给合作方调用,并且需要能够开机自启动。由于合作方擅长web,故将python程序作为web服务接口,部署在虚拟机中。为了锻炼自己的能力,虚拟机选择了centos7。
大家自行下载各个版本的VMware即可,不做赘述。
首先需要去下载centos7的iso,然后在VMware上按照要求一步步安装系统,相关配置过程网上教程也很多,按照教程一步步来即可。
anaconda3是python的强有力工具,在虚拟机上,我们不需要太过完备的库,所以可以安装微型版miniconda3,前往官网下载适合的版本,官方提供了命令行一件安装配置的方法,系统变量也添加好了。至此基本python环境也有了,需要的相关库直接pip install就行。
将python搭建web服务,选择了flask库,如果想要让主机访问,还需要用上pywsgi,具体用法例
```python
from flask import Flask,jsonify,request
from gevent import pywsgi
#创建对象
app=Flask(__name__)
#定义接口路径,调用方法,调用时运行的函数
@app.route('/process',methods=['POST'])
def app_process():
具体函数
#启动
if __name__=="__main__":
server =pywsgi.WSGIServer(('0.0.0.0',2023),app) #0.0.0.0表示使用本机ip,2023为端口号
server.serve_forever()
似乎到这里服务就配置好了。但是,在主机上调用接口并找不到服务器,需要将虚拟机的防火墙关闭,需要永久关闭,不然重启之后会再次开启。进入root权限,使用
systemctl disable firewalld
而不是 systemctl stop firewalld
查看状态 systemctl status firewalld
到这里不出意外已经配置好了能在主机调用的web接口了
开机自启动有两个点需要解决。第一个点,每次开机的时候,需要选择一个用户登录,不然不会自动选择用户开机。我们希望只需要点击虚拟机开机,后面所有的事情都自动完成。所以,需要设定开机无需选择用户,无需输入密码,直接默认用户登入。步骤如下:
AutomaticLoginEnable=True
AutomaticLogin=<your_username>
其中<your_username>为你希望系统开机后自动登录的用户名。
第二个点,开机自动运行python文件。
首先建立一个脚本文件start.sh
#!/bin/sh
/home/user/miniconda3/bin/python3 yourpath/api.py
这指定了使用miniconda3的python3作为解释器运行你的路径下的python文件
还需要给start.sh可执行权限
chmod +x start.sh
然后建立一个自启动服务,在启动时执行start.sh脚本,即运行python,在/etc/systemd/system目录下,创建startup.service,service下填入start.sh的完整路径
[Unit]
Description=My Startup Service
After=network.target
[Service]
ExecStart=/home/username/start.sh
[Install]
WantedBy=default.target
同样地,给予可执行权限
chmod +x startup.service
最后,reboot重启,验证是否成功。使用下列命令可查看日志
$ sudo journalctl -u startup.service
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。