当前位置 博文首页 > mukes的博客:如何让你的 Python 代码在腾讯云 Linux 中一直运行
📢博客主页:https://blog.csdn.net/mukes
📢欢迎点赞👍收藏?留言📝如有错误敬请指正!
📢本文由 mukes 原创,首发于 csdn
最近写了一些爬取数据的 Python 代码,每次爬取都要打开电脑运行,睡觉时也要开着,这东西占据我笔记本大量的使用时间,于是寻求更好的替代方法,遂入手了腾讯云,花了半个小时部署到腾讯云上,让它在云服务器上一直运行,把部署过程总结一下。
腾讯云有学生优惠,只要你年龄在 25 以下不需要学生认证就可购买,我花了 27 块买了三个月的 CPU 1 核,内存 2GB,系统盘 60GB,带宽 5Mbps,流量包 1000GB/月
的套餐,我选的系统是 CentOS 7.6
.
购买成功后
在服务器页面直接点击登录
即可直接登录 CentOS。
点击重置密码
可 设置密码 或 创建新用户和密码。
点击密钥
创建密钥,并在服务器
管理页面绑定密钥。(这步可先不设置)
注:如果你绑定了密钥,那么将不能通过密码登录,通过密码登录会出现出现错误:PuTTY error: "No supported authentication methods available"
这个问题的解决方法参考我另一篇博客:腾讯云设置密钥后无法通过 ssh 账号密码登录
我们需要把本地代码上传到 CentOS 中,因而要下载 PuTTY 和 WinSCP。
并把 PuTTY 设置为 WinSCP 的 集成应用程序
(只要先安装 PuTTY,再装 WinSCP,系统会自行配置好,当然绿色版就需要手动配置了。)
配置完后打开 WinSCP 远程登录云服务器。
开始安装之前先查看一下操作系统环境和 Python 版本。
[root@VM-12-13-centos ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[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,因此就不需要安装了。
[root@VM-12-13-centos ~]# pip3 -V
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)
[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
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
)。
打开 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 目录下即可
运行程序有两种,一种是前台运行,一种是后台运行。
前台运行 就是直接在当前窗口运行,运行日志也会打印在当前窗口,按 ctrl + c
就会停止运行,退出终端时也会停止。
后台运行 通过后台执行,就算是当前终端关闭或者执行其他程序,也不影响。
注:以下代码的运行均在 /home/pythonproject 目录下运行,若在其他目录下,则需添加绝对路径,如:python3 /home/pythonproject/test.py
[root@VM-12-13-centos ~]# python3 test.py
可以先用前台运行测试一下 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 中运行。
前台运行的代码按 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]
参考资料