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 脚本内容:

1 #!/bin/bash
2 #chennailuan's function
3
4
5 #check last command id Ok or not.
6 check_ok(){7 if [ $? !=0 ]8 then9 echo "Error,Check the error log."
10 exit 1
11 else
12 echo13 fi14 }
4.2.openssl_install_step_1.sh 脚本内容:
1 #!/bin/bash
2 #@author:xiufen.huang
3 #@date:2019-09-03
4 ###############################################
5 echo ""
6 echo ""
7 echo "***************************************************************"
8 echo "* *"
9 echo "* *"
10 echo "* openssl服务升级自动安装部署 *"
11 echo "* *"
12 echo "* *"
13 echo "***************************************************************"
14 echo ""
15 echo ""
16 echo "*****安装时间大约15分钟,仅做参考,依网速快慢而定,请耐心等待*****"
17
18 #导入常用方法类
19 source ./cnl_function.sh20
21 #获取脚本所在的当前路径
22 path_now=$(cd "$(dirname"$0")"; pwd)23 echo "脚本执行当前路径为: $path_now"
24
25 start_time=$(date '+%Y-%m-%d %H:%M:%S')26 echo "安装开始时间:$start_time"
27
28 echo "1.下载最新版openssl"
29 [ -f openssl-1.1.1a.tar.gz ] || wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz30
31 #如果存在解压路径删除
32 [ -d openssl-1.1.1a ] && rm -rf openssl-1.1.1a33
34 echo "2.解压安装包"
35 tar -zxf openssl-1.1.1a.tar.gz36
37 #检验上一命令是否正常执行完成
38 check_ok39
40 echo "3.备份原配置"
41 [ -f /usr/bin/openssl.bak ] || mv /usr/bin/openssl /usr/bin/openssl.bak42 [ -f /usr/include/openssl.bak ] || mv /usr/include/openssl/ /usr/include/openssl.bak43
44 #openssl安装目录
45 path_openssl=/usr/local/openssl46
47 echo "4.创建安装目录"
48 echo "判断是否存在openssl文件夹,如果不存在则新建openssl文件夹"
49 if [ -d $path_openssl ]50 then51 echo "openssl文件夹已经创建,不需要重复创建!"
52 else
53 mkdir -p /usr/local/openssl54 echo "openssl文件夹创建成功!"
55 fi56 echo ""
57
58 echo "5.编译安装编译工具及库"
59 cd openssl-1.1.1a60 check_ok61
62 #安装gcc编译器
63 yum install gcc* glien* -y64 check_ok65
66 echo "开始编译......"
67 #一定要shared zlib,否则python3安装带ssl,pip无法使用
68 ./config --prefix=/usr/local/openssl shared zlib69 check_ok70
71 echo "开始安装......"
72 make73 check_ok74 make install75 check_ok76
77 echo "6.新版配置"
78 #将安装好的openssl命令软连到/usr/bin/openssl
79 [ -f /usr/bin/openssl ] || ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl80 #将安装好的openssl 的openssl命令软连到/usr/bin/openssl
81 [ -f /usr/include/openssl ] || ln -s /usr/local/openssl/include/openssl /usr/include/openssl82 #软链到升级后的libssl.so
83 [ -f /usr/local/lib64/libssl.so ] || ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so84 #添加软链
85 [ -f /usr/lib64/libssl.so.1.1 ] || ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
86 [ -f /usr/lib64/libcrypto.so.1.1 ] || ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
87
88 echo "7.修改系统配置"
89 #写入openssl库文件的搜索路径
90 echo "/usr/local/openssl/lib" >> /etc/ld.so.conf91
92 #使修改后的/etc/ld.so.conf生效
93 /sbin/ldconfig -v94
95 echo "8.查看openssl版本"
96 openssl version97
98 echo "删除安装包"
99 rm -rf openssl-1.1.1a100 rm -rf openssl-1.1.1a.tar.gz101
102 end_time=$(date '+%Y-%m-%d %H:%M:%S')103 echo "安装结束时间:$end_time"
104
105 echo "openssl服务升级完成."
4.3.python3_install_step_2.sh 脚本内容:
1 #!/bin/bash
2 #@author:xiufen.huang
3 #@date:2019-09-03
4 ###############################################
5 echo ""
6 echo ""
7 echo "***************************************************************"
8 echo "* *"
9 echo "* *"
10 echo "* python3.7服务自动安装部署 *"
11 echo "* *"
12 echo "* *"
13 echo "***************************************************************"
14 echo ""
15 echo ""
16 echo "*****安装时间大约12分钟,仅做参考,依网速快慢而定,请耐心等待*****"
17
18 #导入常用方法类
19 source ./cnl_function.sh20
21 #获取脚本所在的当前路径
22 path_now=$(cd "$(dirname"$0")"; pwd)23 echo "脚本执行当前路径为: $path_now"
24
25 start_time=$(date '+%Y-%m-%d %H:%M:%S')26 echo "安装开始时间:$start_time"
27
28 echo "1.下载Python-3.7.4.tgz"
29 [ -f Python-3.7.4.tgz ] || wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz30
31 #如果存在解压路径删除
32 [ -d Python-3.7.4 ] && rm -rf Python-3.7.4
33
34 echo "2.解压安装包"
35 tar -xvf Python-3.7.4.tgz36
37 #检验上一命令是否正常执行完成
38 check_ok39
40 echo "3.安装编译工具及库"
41 cd Python-3.7.4
42 check_ok43
44 #安装gcc编译器
45 yum install gcc* glien* -y46 check_ok47
48 #非必需--安装失败时,可以尝试安装组的开发工具:
49 yum grouplist50 check_ok51 yum groupinstall 'Development Tools' -y52 check_ok53
54 #安装依赖包,解决make报错ModuleNotFoundError: No module named '_ctypes'的解决办法
55 yum install libffi-devel -y56
57 #python3.7安装目录
58 path_python=/usr/local/python359
60 echo "4.创建安装目录"
61 echo "判断是否存在python3文件夹,如果不存在则新建python3文件夹"
62 if [ -d $path_python ]63 then64 echo "python3文件夹已经创建,不需要重复创建!"
65 else
66 mkdir -p /usr/local/python367 echo "python3文件夹创建成功!"
68 fi69 echo ""
70
71 #修改./Modules/Setup.dist文件,解决pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
72 #代码块,echo一定要用单引号'
73 echo '_socket socketmodule.c' >> Modules/Setup.dist74 echo 'SSL=/usr/local/openssl' >> Modules/Setup.dist75 echo '_ssl _ssl.c \' >> Modules/Setup.dist
76 echo '-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \' >> Modules/Setup.dist
77 echo '-L$(SSL)/lib -lssl -lcrypto' >> Modules/Setup.dist78
79 echo "5.开始编译"
80 ./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl --with-ssl-default-suites=python81 check_ok82
83 echo "6.开始安装"
84 make85 check_ok86 sudo make install87 check_ok88
89 echo "7.创建快捷路径"
90 #添加软链接
91 [ -f /usr/bin/python3 ] || ln -s /usr/local/python3/bin/python3 /usr/bin/python392 [ -f /usr/bin/pip3 ] || ln -s /usr/local/python3/bin/pip3 /usr/bin/pip393
94 echo "8.检验是否安装成功"
95 python3 -V96
97 echo "删除安装包"
98 rm -rf Python-3.7.4
99 rm -rf Python-3.7.4.tgz100
101 echo "升级pip3版本"
102 pip3 install --upgrade pip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com103 pip3 install --upgrade setuptools -i http://pypi.douban.com/simple --trusted-host pypi.douban.com104
105 pip3 list106
107 end_time=$(date '+%Y-%m-%d %H:%M:%S')108 echo "安装结束时间:$end_time"
109
110 echo "python3.7服务安装完成."
4.4.python3_process_step_3.sh 脚本内容:
1 #!/bin/bash
2 #@author:xiufen.huang
3 #@date:2019-09-03
4 ###############################################
5 echo ""
6 echo ""
7 echo "****************************************************************************"
8 echo "* *"
9 echo "* *"
10 echo "* python3程序自动部署&启动监控信息采集脚本 *"
11 echo "* 部署需要的文件,需要提前用rz上传,详细请参阅:详细操作步骤说明.md *"
12 echo "* *"
13 echo "* *"
14 echo "****************************************************************************"
15 echo ""
16 echo ""
17 echo "***********部署时间大约3分钟,仅做参考,依网速快慢而定,请耐心等待************"
18
19 #导入常用方法类
20 source ./cnl_function.sh21
22 #程序部署目录(根据自己情况,修改为自己的部署目录)
23 deploy_path="/apps/python3_script"
24
25 #监控信息采集脚本
26 startup_file="collector_startup.py"
27
28 #切到程序部署目录
29 cd $deploy_path30
31 #获取脚本所在的当前路径
32 path_now=$(cd "$(dirname"$0")"; pwd)33 echo "脚本执行当前路径为: $path_now"
34
35 start_time=$(date '+%Y-%m-%d %H:%M:%S')36 echo "部署开始时间:$start_time"
37
38 echo "1.安装dos2unix命令"
39 yum -y install dos2unix*
40
41 check_ok42
43 echo "2.安装postgresql插件"
44 #linux环境要安装模块psycopg2,需要先安装postgresql插件
45 yum install postgresql-devel* -y46
47 #判断是否上传脚本了
48 if [ ! -e requirements.txt ]49 then50 echo "本次部署需要脚本,请再次确认是否按【详细操作步骤说明.md】 上传了?"
51 exit 1
52 else
53 #1.执行命令安装requirements.txt中的模块
54 echo "3.安装程序需要的python3模块"
55 pip3 install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com56 check_ok57 fi58
59 #查看已经安装的模块
60 pip3 list61
62 echo "4.睡眠2秒,查看安装模块"
63 sleep 2s64
65 echo "5.转换脚本文件格式"
66 sudo find -name "*.py" |xargs dos2unix67
68 check_ok69
70 echo "6.批量增加可执行权限"
71 chmod +x *.py72
73 echo "7.启动python程序"
74 nohup python3 -u $deploy_path/$startup_file &
75
76 sleep 1s77 rm -rf nohup.out78
79 end_time=$(date '+%Y-%m-%d %H:%M:%S')80 echo "8.部署结束时间:$end_time"
81
82 echo "python3程序部署完成."
4.5.deploy_python3.sh 脚本内容:
1 #!/bin/bash
2 #@author:xiufen.huang
3 #@date:2019-09-03
4 ###############################################
5 echo ""
6 echo ""
7 echo "**************************************************"
8 echo "* *"
9 echo "* *"
10 echo "* python3程序部署集成脚本 *"
11 echo "* 详细请参阅:详细操作步骤说明.md *"
12 echo "* *"
13 echo "* *"
14 echo "**************************************************"
15 echo ""
16 echo ""
17
18 #openssl服务升级自动安装部署--shell脚本
19 step_1="openssl_install_step_1.sh"
20
21 #python3.7服务自动安装部署--shell脚本
22 step_2="python3_install_step_2.sh"
23
24 #python3程序自动部署--shell脚本
25 step_3="python3_process_step_3.sh"
26
27 #程序部署目录(根据自己情况,修改为自己的部署目录)
28 deploy_path="/apps/python3_script"
29
30 #监控信息采集脚本
31 startup_file="collector_startup.py"
32
33 #openssl服务升级自动安装部署
34 function openssl(){35 sh $step_136 }37
38 #python3.7服务自动安装部署
39 function python3(){40 sh $step_241 }42
43 #python3程序自动部署&启动监控信息采集脚本--shell脚本
44 function process(){45 sh $step_346 }47
48 #启动监控信息采集脚本
49 function start(){50 echo "开始启动监控信息采集脚本..."
51 #查找python3运行的进程数
52 num=`ps -ef|grep python3|grep -v grep|wc -l`53 #echo "$num...."
54 #判断是否有python3进程运行,如果没有则运行执行nohup命令
55 if [ "$num" = "0" ] || [ "$num" = "2"] ;then56 #切到程序部署目录
57 cd $deploy_path58 nohup python3 -u $deploy_path/$startup_file &
59 echo "启动成功..."
60 sleep 1s61 rm -rf nohup.out62 else
63 echo "进程已经存在,启动失败,请检查..."
64 exit 065 fi66 }67
68 #信息监控信息采集脚本
69 function stop(){70 echo "开始停止监控信息采集脚本..."
71 num=`ps -ef|grep python3|grep -v grep|wc -l`72 #echo "$num...."
73 if [ "$num" = "0" ] || [ "$num" = "2"];then74 echo "服务未启动,无须停止..."
75 else
76 #正常停止python3
77 ps -ef|grep python3|grep -v grep|awk '{print $2;}'|xargs kill78 echo "进程已经关闭..."
79 fi80 }81
82
83 #case 命令获取输入的参数,例:参数:start,执行start(),参数:stop,执行stop(),
84 case "$1" in
85 "openssl")86 openssl87 ;;88 "python3")89 python390 ;;91 "process")92 process93 ;;94 "start")95 start96 ;;97 "stop")98 stop99 ;;100 *)101 ;;102 esac

5.使用说明

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

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

1 #程序部署目录(根据自己情况,修改为自己的部署目录)

2 deploy_path="/apps/python3_script"

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

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

1 #程序部署目录(根据自己情况,修改为自己的部署目录)

2 deploy_path="/apps/python3_script"

5.3.上传部署shell脚本

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

1 #批量增加可执行权限

2 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分钟,仅做参考,依网速快慢而定。

1 #自动升级命令

2 sh deploy_python3.sh openssl

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

5.5.安装python3.7服务

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

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

1 #自动安装命令

2 sh deploy_python3.sh python3

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

5.6.部署采集监控信息

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

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

1 #自动部署命令

2 sh deploy_python3.sh process

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

5.7.程序启动或停止

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

1 #启动

2 sh deploy_python3.sh start3

4 #停止

5 sh deploy_python3.sh stop