📢博客主页:https://blog.youkuaiyun.com/mukes
📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!
📢本文由 mukes 原创,首发于 csdn
一、背景
最近写了一些爬取数据的 Python 代码,每次爬取都要打开电脑运行,睡觉时也要开着,这东西占据我笔记本大量的使用时间,于是寻求更好的替代方法,遂入手了腾讯云,花了半个小时部署到腾讯云上,让它在云服务器上一直运行,把部署过程总结一下。
二、准备
1.购买腾讯云
腾讯云有学生优惠,只要你年龄在 25 以下不需要学生认证就可购买,我花了 27 块买了三个月的 CPU 1 核,内存 2GB,系统盘 60GB,带宽 5Mbps,流量包 1000GB/月
的套餐,我选的系统是 CentOS 7.6
.
购买成功后
-
在服务器页面直接点击
登录
即可直接登录 CentOS。
-
点击
重置密码
可 设置密码 或 创建新用户和密码。
-
点击
密钥
创建密钥,并在服务器
管理页面绑定密钥。(这步可先不设置)
注:如果你绑定了密钥,那么将不能通过密码登录,通过密码登录会出现出现错误:PuTTY error: "No supported authentication methods available"
这个问题的解决方法参考我另一篇博客:腾讯云设置密钥后无法通过 ssh 账号密码登录
2.安装 PuTTY 和 WinSCP
我们需要把本地代码上传到 CentOS 中,因而要下载 PuTTY 和 WinSCP。
并把 PuTTY 设置为 WinSCP 的 集成应用程序
(只要先安装 PuTTY,再装 WinSCP,系统会自行配置好,当然绿色版就需要手动配置了。)
配置完后打开 WinSCP 远程登录云服务器。
三、部署步骤
开始安装之前先查看一下操作系统环境和 Python 版本。
1.查看操作系统环境:
[root@VM-12-13-centos ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
2.查看 Python 版本
[root@VM-12-13-centos ~]# python -V
Python 2.7.5
[root@VM-12-13-centos ~]# python3 -V
Python 3.6.8
可以看到操作系统是 7.6,Python 有 Python2 也有 Python3,因此就不需要安装了。
3.查看 pip3 版本
[root@VM-12-13-centos ~]# pip3 -V
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)
4.更新 pip3(此步可跳过)
[root@VM-12-13-centos ~]# pip3 install --upgrade pip
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting pip
Downloading http://mirrors.tencentyun.com/pypi/packages/cd/6f/43037c7bcc8bd8ba7c9074256b1a11596daa15555808ec748048c1507f08/pip-21.1.1-py3-none-any.whl (1.5MB)
100% |████████████████████████████████| 1.6MB 3.8MB/s
Installing collected packages: pip
Successfully installed pip-21.1.1
5.安装代码运行所需要的库,比如 beautifulsoup4
,lxml
(根据自己的需要安装)
[root@VM-12-13-centos ~]# pip3 install beautifulsoup4
Looking in indexes: http://mirrors.tencentyun.com/pypi/simple
Collecting beautifulsoup4
Downloading http://mirrors.tencentyun.com/pypi/packages/d1/41/e6495bd7d3781cee623ce23ea6ac73282a373088fcd0ddc809a047b18eae/beautifulsoup4-4.9.3-py3-none-any.whl (115 kB)
|████████████████████████████████| 115 kB 1.1 MB/s
Collecting soupsieve>1.2
Downloading http://mirrors.tencentyun.com/pypi/packages/36/69/d82d04022f02733bf9a72bc3b96332d360c0c5307096d76f6bb7489f7e57/soupsieve-2.2.1-py3-none-any.whl (33 kB)
Installing collected packages: soupsieve, beautifulsoup4
Successfully installed beautifulsoup4-4.9.3 soupsieve-2.2.1
[root@VM-12-13-centos ~]# pip3 install lxml
Looking in indexes: http://mirrors.tencentyun.com/pypi/simple
Collecting lxml
Downloading http://mirrors.tencentyun.com/pypi/packages/53/b2/2fb24ff277d35182 2a3087e18aea41a20942f6557a3c864dda67ebecf8c7/lxml-4.6.3-cp36-cp36m-manylinux2014 _x86_64.whl (6.3 MB)
|████████████████████████████████| 6.3 MB 1.9 MB/s
Installing collected packages: lxml
Successfully installed lxml-4.6.3
这些第三方库一般会安装在 /usr/local/lib/python3.6/site-packages
下(不同版本 Python 带的后缀不一样,Python 3.7 就是 python3.7
)。
6.上传本地代码到云服务器
打开 WinSCP,登录远程云服务器
在 /home
下新建一个 pythonproject
目录
[root@VM-12-13-centos ~]# mkdir /home/pythonproject #创建 pythonproject 目录
[root@VM-12-13-centos ~]# cd /home/pythonproject #切换到 pythonproject 目录
[root@VM-12-13-centos pythonproject]#
在 WinSCP 中把本地写好的 Python 代码直接复制粘贴到 pythonproject 目录下即可
7.运行 Python 程序
运行程序有两种,一种是前台运行,一种是后台运行。
前台运行 就是直接在当前窗口运行,运行日志也会打印在当前窗口,按 ctrl + c
就会停止运行,退出终端时也会停止。
后台运行 通过后台执行,就算是当前终端关闭或者执行其他程序,也不影响。
注:以下代码的运行均在 /home/pythonproject 目录下运行,若在其他目录下,则需添加绝对路径,如:python3 /home/pythonproject/test.py
1.前台运行 Pyhon 代码命令
[root@VM-12-13-centos ~]# python3 test.py
可以先用前台运行测试一下 Python 代码能否正确运行,再用后台运行命令。
2.后台运行 Python 代码命令
[root@VM-12-13-centos ~]# nohup python3 -u test.py > test.log 2>&1 &
含义解释:
-
nohup
是 no hang up 的缩写,就是不挂起的意思,不断地运行。 -
-u
代表程序不启用缓存,也就是把输出直接放到 log 中,没这个参数的话,python 的输出进行了缓冲,导致 test.log 并不能够马上看到输出结果。 -
> test.log
将输出日志保存到这个 log 中 -
2>&1
0 表示 stdin 标准输入,用户键盘输入的内容
1 表示 stdout 标准输出,输出到显示屏的内容
2 表示 stderr 标准错误,报错内容2>&1 是一个整体,> 左右不能有空格,即将错误内容重定向输入到标准输出中去。就是说把
报错内容
和 test.py 脚本的正确输出内容
都保存在 test.log 里面。 -
为啥不用
2>1
而是用2>&1
呢?
因为该命令nohup python3 -u test.py > test.log 2>&1 &
可以拆分为
nohup python3 -u test.py 2> test.log &
nohup python3 -u test.py 1> test.log &
2>1 的话会把 1 当作一个文件,把报错内容保存到 1 文件中,故用 2>&1. -
& 最后一个 & ,代表该命令在后台执行
命令运行后会有提示,示例:
[1] 14052
代表进程 14052 中运行。
3.终止运行程序
前台运行的代码按 ctrl + c
和退出终端时即可停止运行。
后台运行的代码则需要终止进程:
-
查看后台运行的所有进程:
[root@VM-12-13-centos ~]# ps -aux
-
查看后台运行的所有 python 进程:
[root@VM-12-13-centos ~]# ps aux |grep python
root 1042 0.0 0.9 574288 17464 ? Ssl 14:43 0:01 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root 14052 1.5 2.0 244248 38168 pts/2 S 19:52 1:41 python3 -u spiderbot.py
root 29009 0.0 0.0 112812 972 pts/0 R+ 21:42 0:00 grep --color=auto python
或者
[root@VM-12-13-centos ~]# ps -ef | grep python
root 1042 1 0 14:43 ? 00:00:01 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root 14052 9773 1 19:52 pts/2 00:01:43 python3 -u spiderbot.py
root 29319 28340 0 21:44 pts/0 00:00:00 grep --color=auto python
- 删除进程
[root@VM-12-13-centos ~]# kill -9 [进程 id]
-9 的意思是强制删除
参考资料
- 如何把 python 项目部署到 linux 服务器上 [https://www.cnblogs.com/huanghanyu/p/12921842.html]
- 大学生选择云服务器,腾讯云?阿里云?还是华为云?[https://smileyan.blog.youkuaiyun.com/article/details/96209253]
- Python 后台运行 —nohup 及 2>&1 详解 [https://blog.youkuaiyun.com/weixin_42840933/article/details/85780125]
- Centos 后台运行 python 程序 [https://www.cnblogs.com/liangblog/p/12762674.html]