1.前言:

在安装python3过程中,通过搜索一些文章参考,发现比较麻烦,而且还出现一些不可预期的报错。python3环境需要升级openssl,所以为了部署到其他环境更方便,写自动安装脚本方式,且安装模式为python3.x与python2.x共存,防止可能发生原有环境异常的情况。

现在我把脚本分享出来,希望可以帮助到有需要的人,业务采集监控python脚本文件不提供,因为那些跟实际业务开发关联比较紧,比较没有参考意义也不方便公开。

shell自动安装脚本,只需按说明简单修改配置,和调用集成脚本对应函数即可完成。安装过程大约30分钟,仅做参考,依网速快慢而定。

2.文件夹功能说明:

文件夹名称 功能说明
python3_deploy 存放部署需要shell脚本文件
python3_script 存放实现采集监控信息python脚本

3.python3_deploy下文件摘要说明

shell脚本文件 主要用途 备注
cnl_function.sh 常用方法(检测上一次操作是否正常完成) 安装服务脚本引用
openssl_install_step_1.sh openssl服务升级自动安装部署  
python3_install_step_2.sh python3.7服务自动安装部署  
python3_process_step_3.sh python3程序自动部署&启动监控信息采集脚本 需配置,下文详细说明
deploy_python3.sh 集成脚本,主要操作入口 需配置,下文详细说明

4.shell安装脚本 

4.1. cnl_function.sh  脚本内容:

 #!/bin/bash
#chennailuan's function #check last command id Ok or not.
check_ok(){
if [ $? != 0 ]
then
echo "Error,Check the error log."
exit 1
else
echo
fi
}

4.2.openssl_install_step_1.sh 脚本内容:  

 #!/bin/bash
# @author:xiufen.huang
# @date:2019-09-03
###############################################
echo ""
echo ""
echo "***************************************************************"
echo "* *"
echo "* *"
echo "* openssl服务升级自动安装部署 *"
echo "* *"
echo "* *"
echo "***************************************************************"
echo ""
echo ""
echo "*****安装时间大约15分钟,仅做参考,依网速快慢而定,请耐心等待*****" # 导入常用方法类
source ./cnl_function.sh #获取脚本所在的当前路径
path_now=$(cd "$(dirname "$0")"; pwd)
echo "脚本执行当前路径为: $path_now " start_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "安装开始时间:$start_time" echo "1.下载最新版openssl"
[ -f openssl-1.1.1a.tar.gz ] || wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz # 如果存在解压路径删除
[ -d openssl-1.1.1a ] && rm -rf openssl-1.1.1a echo "2.解压安装包"
tar -zxf openssl-1.1.1a.tar.gz # 检验上一命令是否正常执行完成
check_ok echo "3.备份原配置"
[ -f /usr/bin/openssl.bak ] || mv /usr/bin/openssl /usr/bin/openssl.bak
[ -f /usr/include/openssl.bak ] || mv /usr/include/openssl/ /usr/include/openssl.bak #openssl安装目录
path_openssl=/usr/local/openssl echo "4.创建安装目录"
echo "判断是否存在openssl文件夹,如果不存在则新建openssl文件夹"
if [ -d $path_openssl ]
then
echo "openssl文件夹已经创建,不需要重复创建!"
else
mkdir -p /usr/local/openssl
echo "openssl文件夹创建成功!"
fi
echo "" echo "5.编译安装编译工具及库"
cd openssl-1.1.1a
check_ok # 安装gcc编译器
yum install gcc* glien* -y
check_ok echo "开始编译......"
# 一定要shared zlib,否则python3安装带ssl,pip无法使用
./config --prefix=/usr/local/openssl shared zlib
check_ok echo "开始安装......"
make
check_ok
make install
check_ok echo "6.新版配置"
#将安装好的openssl命令软连到/usr/bin/openssl
[ -f /usr/bin/openssl ] || ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
# 将安装好的openssl 的openssl命令软连到/usr/bin/openssl
[ -f /usr/include/openssl ] || ln -s /usr/local/openssl/include/openssl /usr/include/openssl
#软链到升级后的libssl.so
[ -f /usr/local/lib64/libssl.so ] || ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so
# 添加软链
[ -f /usr/lib64/libssl.so.1.1 ] || ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
[ -f /usr/lib64/libcrypto.so.1.1 ] || ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 echo "7.修改系统配置"
#写入openssl库文件的搜索路径
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf #使修改后的/etc/ld.so.conf生效
/sbin/ldconfig -v echo "8.查看openssl版本"
openssl version echo "删除安装包"
rm -rf openssl-1.1.1a
rm -rf openssl-1.1.1a.tar.gz end_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "安装结束时间:$end_time" echo "openssl服务升级完成."

4.3.python3_install_step_2.sh 脚本内容:  

 #!/bin/bash
# @author:xiufen.huang
# @date:2019-09-03
###############################################
echo ""
echo ""
echo "***************************************************************"
echo "* *"
echo "* *"
echo "* python3.7服务自动安装部署 *"
echo "* *"
echo "* *"
echo "***************************************************************"
echo ""
echo ""
echo "*****安装时间大约12分钟,仅做参考,依网速快慢而定,请耐心等待*****" # 导入常用方法类
source ./cnl_function.sh #获取脚本所在的当前路径
path_now=$(cd "$(dirname "$0")"; pwd)
echo "脚本执行当前路径为: $path_now " start_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "安装开始时间:$start_time" echo "1.下载Python-3.7.4.tgz"
[ -f Python-3.7.4.tgz ] || wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz # 如果存在解压路径删除
[ -d Python-3.7.4 ] && rm -rf Python-3.7.4 echo "2.解压安装包"
tar -xvf Python-3.7.4.tgz # 检验上一命令是否正常执行完成
check_ok echo "3.安装编译工具及库"
cd Python-3.7.4
check_ok # 安装gcc编译器
yum install gcc* glien* -y
check_ok # 非必需--安装失败时,可以尝试安装组的开发工具:
yum grouplist
check_ok
yum groupinstall 'Development Tools' -y
check_ok # 安装依赖包,解决make报错ModuleNotFoundError: No module named '_ctypes'的解决办法
yum install libffi-devel -y # python3.7安装目录
path_python=/usr/local/python3 echo "4.创建安装目录"
echo "判断是否存在python3文件夹,如果不存在则新建python3文件夹"
if [ -d $path_python ]
then
echo "python3文件夹已经创建,不需要重复创建!"
else
mkdir -p /usr/local/python3
echo "python3文件夹创建成功!"
fi
echo "" # 修改./Modules/Setup.dist文件,解决pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
# 代码块,echo一定要用单引号'
echo '_socket socketmodule.c' >> Modules/Setup.dist
echo 'SSL=/usr/local/openssl' >> Modules/Setup.dist
echo '_ssl _ssl.c \' >> Modules/Setup.dist
echo ' -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \' >> Modules/Setup.dist
echo ' -L$(SSL)/lib -lssl -lcrypto' >> Modules/Setup.dist echo "5.开始编译"
./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl --with-ssl-default-suites=python
check_ok echo "6.开始安装"
make
check_ok
sudo make install
check_ok echo "7.创建快捷路径"
# 添加软链接
[ -f /usr/bin/python3 ] || ln -s /usr/local/python3/bin/python3 /usr/bin/python3
[ -f /usr/bin/pip3 ] || ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 echo "8.检验是否安装成功"
python3 -V echo "删除安装包"
rm -rf Python-3.7.4
rm -rf Python-3.7.4.tgz echo "升级pip3版本"
pip3 install --upgrade pip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 install --upgrade setuptools -i http://pypi.douban.com/simple --trusted-host pypi.douban.com pip3 list end_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "安装结束时间:$end_time" echo "python3.7服务安装完成."

4.4.python3_process_step_3.sh 脚本内容:

 #!/bin/bash
# @author:xiufen.huang
# @date:2019-09-03
###############################################
echo ""
echo ""
echo "****************************************************************************"
echo "* *"
echo "* *"
echo "* python3程序自动部署&启动监控信息采集脚本 *"
echo "* 部署需要的文件,需要提前用rz上传,详细请参阅:详细操作步骤说明.md *"
echo "* *"
echo "* *"
echo "****************************************************************************"
echo ""
echo ""
echo "***********部署时间大约3分钟,仅做参考,依网速快慢而定,请耐心等待************" # 导入常用方法类
source ./cnl_function.sh # 程序部署目录(根据自己情况,修改为自己的部署目录)
deploy_path="/apps/python3_script" # 监控信息采集脚本
startup_file="collector_startup.py" # 切到程序部署目录
cd $deploy_path #获取脚本所在的当前路径
path_now=$(cd "$(dirname "$0")"; pwd)
echo "脚本执行当前路径为: $path_now " start_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "部署开始时间:$start_time" echo "1.安装dos2unix命令"
yum -y install dos2unix* check_ok echo "2.安装postgresql插件"
# linux环境要安装模块psycopg2,需要先安装postgresql插件
yum install postgresql-devel* -y # 判断是否上传脚本了
if [ ! -e requirements.txt ]
then
echo "本次部署需要脚本,请再次确认是否按【详细操作步骤说明.md】 上传了?"
exit 1
else
# 1.执行命令安装requirements.txt中的模块
echo "3.安装程序需要的python3模块"
pip3 install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
check_ok
fi # 查看已经安装的模块
pip3 list echo "4.睡眠2秒,查看安装模块"
sleep 2s echo "5.转换脚本文件格式"
sudo find -name "*.py" | xargs dos2unix check_ok echo "6.批量增加可执行权限"
chmod +x *.py echo "7.启动python程序"
nohup python3 -u $deploy_path/$startup_file & sleep 1s
rm -rf nohup.out end_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "8.部署结束时间:$end_time" echo "python3程序部署完成."

4.5.deploy_python3.sh 脚本内容:

 #!/bin/bash
# @author:xiufen.huang
# @date:2019-09-03
###############################################
echo ""
echo ""
echo "**************************************************"
echo "* *"
echo "* *"
echo "* python3程序部署集成脚本 *"
echo "* 详细请参阅:详细操作步骤说明.md *"
echo "* *"
echo "* *"
echo "**************************************************"
echo ""
echo "" # openssl服务升级自动安装部署--shell脚本
step_1="openssl_install_step_1.sh" # python3.7服务自动安装部署--shell脚本
step_2="python3_install_step_2.sh" # python3程序自动部署--shell脚本
step_3="python3_process_step_3.sh" # 程序部署目录(根据自己情况,修改为自己的部署目录)
deploy_path="/apps/python3_script" # 监控信息采集脚本
startup_file="collector_startup.py" # openssl服务升级自动安装部署
function openssl(){
sh $step_1
} # python3.7服务自动安装部署
function python3(){
sh $step_2
} # python3程序自动部署&启动监控信息采集脚本--shell脚本
function process(){
sh $step_3
} # 启动监控信息采集脚本
function start(){
echo "开始启动监控信息采集脚本..."
#查找python3运行的进程数
num=`ps -ef|grep python3|grep -v grep|wc -l`
#echo "$num...."
#判断是否有python3进程运行,如果没有则运行执行nohup命令
if [ "$num" = "" ] || [ "$num" = "" ] ;then
# 切到程序部署目录
cd $deploy_path
nohup python3 -u $deploy_path/$startup_file &
echo "启动成功..."
sleep 1s
rm -rf nohup.out
else
echo "进程已经存在,启动失败,请检查..."
exit 0
fi
} # 信息监控信息采集脚本
function stop(){
echo "开始停止监控信息采集脚本..."
num=`ps -ef|grep python3|grep -v grep|wc -l`
#echo "$num...."
if [ "$num" = "" ] || [ "$num" = "" ];then
echo "服务未启动,无须停止..."
else
#正常停止python3
ps -ef|grep python3|grep -v grep|awk '{print $2;}'|xargs kill
echo "进程已经关闭..."
fi
} #case 命令获取输入的参数,例:参数:start,执行start(),参数:stop,执行stop(),
case "$1" in
"openssl")
openssl
;;
"python3")
python3
;;
"process")
process
;;
"start")
start
;;
"stop")
stop
;;
*)
;;
esac

5.使用说明

5.1.配置部署路径-自动部署脚本

文件路径:/python3_deploy/python3_process_step_3.sh ,只需修改程序部署目录deploy_path的值

 # 程序部署目录(根据自己情况,修改为自己的部署目录)
deploy_path="/apps/python3_script"

5.2.配置部署路径-集成脚本

文件路径:/python3_deploy/deploy_python3.sh ,只需修改程序部署目录deploy_path的值

 # 程序部署目录(根据自己情况,修改为自己的部署目录)
deploy_path="/apps/python3_script"

5.3.上传部署shell脚本

上传文件夹:python3_deploy下的所有文件到指定目录,可以为部署目录(即步骤1、2配置值),也可自己创建的一个目录存储(建议单独目录存储)。假设存储目录:/apps/python3_deploy 。上传完成后,需要为shell脚本给定可执行权限。

 # 批量增加可执行权限
chmod +x *.sh

5.4.升级openssl服务版本

升级openssl版本,是为了解决:使用pip3时报错: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

安装只需要集成脚本提供的函数,完成自动升级,过程大约15分钟,仅做参考,依网速快慢而定。

 #自动升级命令
sh deploy_python3.sh openssl

升级完成,会给出提示信息:openssl服务升级完成,及升级后版本信息。

5.5.安装python3.7服务

安装模式为python3.x与python2.x共存。命令:python , pthon2 指向python2.x,命令:python3,pip3指向python3.x。

安装只需要集成脚本提供的函数,完成自动安装,过程大约12分钟,仅做参考,依网速快慢而定。

 # 自动安装命令
sh deploy_python3.sh python3

安装完成,会给出提示信息:python3.7服务安装完成,及安装版本,python3模块信息。

5.6.部署采集监控信息

该步骤完成python3程序自动部署环境初始化和启动监控信息采集脚本,原则上只执行一次,可执行多次。

安装只需要集成脚本提供的函数,完成自动部署,过程大约3分钟,仅做参考,依网速快慢而定。

 # 自动部署命令
sh deploy_python3.sh process

部署完成,会给出提示信息:python3程序部署完成。

5.7.程序启动或停止

启动或停止命令不限次调用,按需调用。

 # 启动
sh deploy_python3.sh start # 停止
sh deploy_python3.sh stop

python3自动安装脚本,python3.x与python2.x共存的更多相关文章

  1. mysql 自动备份和nginx自动安装脚本

    一.自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #wugk #Define PATH定义变量 ...

  2. Windows ftp脚本和RSCD agent自动安装脚本

    Windows ftp脚本 和bladelogic RSCD Agent自动安装脚本 比较简单的命令是msiexec /I "C:\RSCD85-SP1-WIN64.msi" /Q ...

  3. python第三方库自动安装脚本

    #python第三方库自动安装脚本,需要在cmd中运行此脚本#BatchInstall.pyimport oslibs = {"numpy","matplotlib&qu ...

  4. LAMP自动安装脚本

    #!/bin/bash # 功能描述:LAMP自动安装脚本 # 初始化 if [ "$(cat /etc/system-release | awk '{print $(NF-1)}' | a ...

  5. Mysql5.7免编译版自动安装脚本

    一:readme: .此脚本仅仅适合于5.7免面编译安装版本. .安装是需自己选择mysql软件安装包:例如mysql--linux-glibc2.-x86_64.-linux-glibc2.-x86 ...

  6. centos6.5下 python3.6安装、python3.6虚拟环境

    https://www.cnblogs.com/paladinzxl/p/6919049.html # python3.6的安装 wget https://www.python.org/ftp/pyt ...

  7. OpenJDK自动安装脚本 InstallOpenJDK.vbs

    Oracle JDK 要收费了,Open JDK没有安装包,只有Zip,写了个安装脚本 InstallOpenJDK.vbs Rem ********************************* ...

  8. 自动安装脚本-------------基于LVMP搭建Nagios 监控

    Mysql初始化参数(mysql-5.6.31) /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local ...

  9. hadoop自动安装脚本

    还不能实现完全自动安装,只能算半自动的. 进行交互主要障碍有两点: 1. ssh-keygen的时候需要点击回车. 2. passwd 需要设置密码  如果谁能解决以上两点,欢迎email给我. 另外 ...

随机推荐

  1. mybatis学习笔记四

    记录下动态sql的常用标签: 1.where 一般用作数据操作添加的条件 例子: <select id="selectByRoleId" resultMap="re ...

  2. USB Reverse Tether (a dirty solution)

    Tether your android phone to your PC using USB cable could share your 3g Internet connection with PC ...

  3. Solving ordinary differential equations I(nonstiff problems),exercise 1.1

    Solve equation $y'=1-3x+y+x^2+xy$ with another initial value $y(0)=1$. Solve: We solve this by using ...

  4. 筛选nginx访问日志文件中的域名

    head  -n 500 1.log |awk  '{print $11}' > 1.txt     查看1.log日志文件前500行记录并打印出第11列也就是域名的那一列,并输出到1.txt文 ...

  5. D. Salary Changing(找中位数)

    题:https://codeforces.com/contest/1251/problem/D 题意:给你n个单位需要满足达到的区间,再给个s,s是要分配给n的单位的量,当然∑l<=s,问经过分 ...

  6. yum源本地部署完后网络部署报错

    错误信息 已加载插件:fastestmirror Determining fastest mirrors * base: mirrors.aliyun.com * extras: mirrors.al ...

  7. Ubuntu虚拟环境的搭建

    转载:https://blog.csdn.net/weixin_43078957/article/details/86006240 虚拟环境的搭建1.pip install virtualenv这个要 ...

  8. 二:MySQL的操作

    1:创建数据库 create database  bjpowernode ; 2:使用数据库 use bjpowernode; 3:导入数据库文件sql source  然后把SQL文件拖过来就可以了 ...

  9. [LC] 443. String Compression

    Given an array of characters, compress it in-place. The length after compression must always be smal ...

  10. [Windows] Access SMBIOS

    SMBIOS architecture System Management BIOS (SMBIOS) is the premier standard for delivering managemen ...