最近写个python小程序,需要部署到CentOS服务器中,遇到了各种问题,下面说下解决的方法。
第一步,安装Python环境
1.从官网下载Python3源码
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
2.安装Python3
tar -xvJf Python-3.6.2.tar.xz cd Python-3.6.2 ./configure prefix=/usr/local/python3 make && make install
3.安装完毕,创建软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python
注意:如果之前已经有安装Python2或其他版本,要先移除旧的
mv /usr/bin/python /usr/bin/python_old
第二步,将本地开发环境的依赖项目生成清单文件
1.在本地的开发环境中,env下执行:
pip3 freeze >requirements.txt
2.将生成后的文件上传到linux服务器
第三步,创建虚拟环境,并安装项目所需的依赖
1.切换到pip3所在的目录 /usr/local/python/bin,执行以下命令
# 安装虚拟环境 pip3 install virtualenv # 创建虚拟环境 ENV virtualenv ENV # 切换到虚拟环境所在的目录 cd ENV # 启用虚拟环境 source ./bin/activate # 安装依赖清单里的库 pip3 install -r requirements.txt # 列出当前虚拟环境所安装的依赖库 pip3 list
第四步:添加自定义系统服务
# 这样的命令在ssh终端退出后,python进程也会被杀掉 python xxx.py &
需要创建一个自定义的系统服务,来保证python程序能够在后台运行。
1.创建系统服务
vim /usr/lib/systemd/system/robot.service
内容如下:
[Unit] Description=robot After=network.target [Service] Type=forking ExecStart=/usr/local/python3/bin/ENV/bin/python /usr/local/python3/bin/ENV/p3.py & PrivateTmp=true [Install] WantedBy=multi-user.target
ExecStart为服务启动时执行的命令,不能用相对路径, 一定要全路径。
这里也可以将命令写到任意的.sh文件中,这里写.sh文件的全路径也是可以的。
2.启用自定义系统服务
systemctl enable robot
3.启动服务
systemctl start robot
可以查看进程,确认一下服务是否启动
ps aux|grep robot
- 本文固定链接: https://freemanapp.com/zh/?p=760
- 转载请注明: freeman 于 FreemanApp 发表