同步更新在个人网站:http://www.wangpengcufe.com/machinelearning/python-python2/
一、背景
用Python写了个脚本,需要部署到Linux环境的服务器上,由于服务器linux系统(centos,redhat等)自带的是python2,现在的python萌新都是从python3开始学习,所以需要给服务器配置一个python3环境,一番摸索过后,踩过一些坑,也总结了一下经验,故留此文。
二、主要应用技术
2.1、linux 命令
三、实施步骤
3.1、安装python3
开始安装之前先看一下机器的环境,主要看一下操作系他的环境和python版本。
查看环境
操作系统:
[root@reportweb]# cat /etc/redhat-release
CentOS release 6.5 (Final)
查看python版本:
[root@reportweb]# python -V
Python 2.6.6
[root@reportweb]# python3 -V
-bash: python3: command not found
可以看到操作系统是CentOS 6.5 ,python此时只有一个python2,没有python 3 。
下面开始进入正式安装:
第1步:下载python安装包,准备编译环境:
[root@reportweb]# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
第2步:下载python源码
[root@reportweb src]# wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
第3步:解压
[root@reportweb src]# tar -zxvf Python-3.6.6.tgz
第4步:安装,编译
[root@reportweb src]# cd Python-3.6.2
[root@reportweb Python-3.6.2] # mkdir /usr/local/python3.6
[root@reportweb Python-3.6.2] # ./configure --prefix=/usr/local/python3.6
[root@reportweb Python-3.6.2] # make
[root@reportweb Python-3.6.2] # make install
第5步:建立软链
[root@reportweb Python-3.6.2] # ln -s /usr/local/python3.6/bin/python3.6 /usr/bin/python3
第6步:查询python版本
[root@reportweb]# python3 -V
Python 3.6.6
[root@reportweb]# python -V
Python 2.6.6
至此,python3安装完毕。
3.2、安装pip3
下面开始安装pip3的步骤。
第1步:安装setuptools
[root@reportweb src]# wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz
第2步:解压
[root@reportweb src]# tar -zxvf setuptools-19.6.tar.gz
第3步:编译,安装
[root@reportweb src] # cd setuptools-19.6/
[root@reportweb setuptools-19.6] # python3 setup.py build
[root@reportweb setuptools-19.6] # python3 setup.py install
第4步:建立软链
[root@reportweb setuptools-19.6] # ln -s /usr/local/python3.6/bin/pip3 /usr/bin/pip3
第5步:查看pip3版本
[root@reportweb] # pip3 -V
pip 8.0.2 from /usr/local/python3.6/lib/python3.6/site-packages/pip-8.0.2-py3.6.egg (python 3.6)
第6步:更新
[root@reportweb] # pip3 install --upgrade pip
Collecting pip
Downloading https://files.pythonhosted.org/packages/00/b6/9cfa56b4081ad13874b0c6f96af8ce16cfbc1cb06bedf8e9164ce5551ec1/pip-19.3.1-py2.py3-none-any.whl (1.4MB)
100% |████████████████████████████████| 1.4MB 172kB/s
Installing collected packages: pip
Found existing installation: pip 8.0.2
Uninstalling pip-8.0.2:
Successfully uninstalled pip-8.0.2
Successfully installed pip-19.3.1
[root@reportweb]# pip3 -V
pip 19.3.1 from /usr/local/python3.6/lib/python3.6/site-packages/pip (python 3.6)
至此,pip3安装完毕。
3.3、启动服务
启动服务分为前台启动和后台启动。
前台启动,就是应用直接由窗口运行,能在窗口直接打印出日志信息,如果手动 ctrl + C 打断时,应用停止。当使用前台启动时,如果我们退出终端,服务就会停止。
后台启动,就是用nohup等命令,执行应用,在窗口关闭后,或者 执行其他命令时,该应用仍然可以再后台运行。
使用前台启动python项目:
[root@reportweb]# python3 test.py
2020-01-02 16:00:47 读取原日志信息:00:00:01.560 [http-nio-8605-exec-5] [DEBUG] Bound request context to thread: org.apache.catalina.connector.RequestFacade@2dc071e6 org.springframework.boot.web.filter.OrderedRequestContextFilter [RID:] [TID:] [MID:]
2020-01-02 16:00:47 转换格式前信息:00:00:01.560 [http-nio-8605-exec-5] [DEBUG] Bound request context to thread: org.apache.catalina.connector.RequestFacade@2dc071e6 org.springframework.boot.web.filter.OrderedRequestContextFilter [RID:] [TID:] [MID:]
^CTraceback (most recent call last):
File "test.py", line 174, in <module>
read_rawlog()
File "test.py", line 79, in read_rawlog
line_json = log_data_to_json(line_temp)
File "test.py", line 120, in log_data_to_json
logger = re.findall(logger_rule, line)
File "/usr/python3/lib/python3.6/re.py", line 222, in findall
return _compile(pattern, flags).findall(string)
KeyboardInterrupt
[root@reportweb data]#
前台会输出正常的日志信息,直到你按下 ctrl + c 打断它,就会报KeyboardInterrupt。
下面演示后台启动python文件:
[root@reportweb data]# nohup python3 test.py &
简单介绍一下nohup 命令
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
描述:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。nohup 执行 默认会自动生成一个 nohup.out 记录文件。
3.4、停止服务
前台启动的服务,直接 ctrl + c 停止服务,或者退出终端,服务就会停止。
后台启动的服务,用命令查看pid,然后 kill -9 pid 杀死任务。
[root@reportweb]# ps -ef|grep python
root 9233 2598 95 16:22 pts/0 00:00:16 python3 test.py
root 9244 2598 0 16:22 pts/0 00:00:00 grep python
[root@reportweb]# kill -9 9233
[root@reportweb]# ps -ef|grep python
[root@reportweb]# ps -ef|grep python
root 9257 2598 0 16:23 pts/0 00:00:00 grep python
[1]+ 已杀死 nohup python3 test.py
3.5、查看python执行的日志
查看前10行命令:
[root@reportweb]# head -n 10 nohup.out
查看后10行命令:
[root@reportweb]# tail -n 10 nohup.out
显示文件 nohup.log 的内容,从第 20 行至文件末尾:
[root@reportweb]# tail +20 nohup.out
要跟踪名为 nohup.log 的文件的增长情况,请输入以下命令:
[root@reportweb]# tail -f nohup.out
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
命令格式:
tail [参数] [文件]
参数:
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
3.6、使用 crontab 来定时执行脚本
配置定时服务,在linux中输入:
vim /etc/crontab
crontab例子说明:
0 2 * * * : /data/starup.sh 每天2点执行一次
*/30 * * * * :/data/starup.sh 每隔30分钟执行一次
内容说明:
1、注意PATH中要加入python执行的path路径,如果不确定自己的python安装路径,可以用 whereis python3 查找
2、配置执行脚本的位置
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/python3.6/bin # 1、此处注意要加入
# python 的执行path,:/usr/local/python3.6/bin, 用冒号隔开
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
0 6 * * * root /home/ssdop/passflow/bin/startup.sh # 2、这里配置的是脚本的位置
3、执行多个命令的方法:
3.1.每个命令之间用;隔开
说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,
但不保证每个命令都执行成功。
3.2.每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
例如:cat /etc/redhat-release && yum -y update && yum list | grep installed > installed.txt 三个命令
3.3.每个命令之间用||隔开
说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功
一条命令为止。
3.6.1、查看定时日志
查看定时日志: tail -100f /var/spool/mail/root
查看任务执行情况: tail -f /var/log/cron
踩坑记录1:/bin/bash: /home/ssdop/passflow/bin/startup.sh: 权限不够
解决:先使用chmod命令对shell脚本赋予权限,再执行
[root]# chmod 777 /home/ssdop/passflow/bin/startup.sh