当前位置 博文首页 > mukes的博客:如何让你的 Python 代码在腾讯云 Linux 中一直运行

    mukes的博客:如何让你的 Python 代码在腾讯云 Linux 中一直运行

    作者:[db:作者] 时间:2021-07-14 13:15

    📢博客主页:https://blog.csdn.net/mukes
    📢欢迎点赞👍收藏?留言📝如有错误敬请指正!
    📢本文由 mukes 原创,首发于 csdn

    一、背景

    最近写了一些爬取数据的 Python 代码,每次爬取都要打开电脑运行,睡觉时也要开着,这东西占据我笔记本大量的使用时间,于是寻求更好的替代方法,遂入手了腾讯云,花了半个小时部署到腾讯云上,让它在云服务器上一直运行,把部署过程总结一下。


    二、准备

    1.购买腾讯云

    腾讯云有学生优惠,只要你年龄在 25 以下不需要学生认证就可购买,我花了 27 块买了三个月的 CPU 1 核,内存 2GB,系统盘 60GB,带宽 5Mbps,流量包 1000GB/月 的套餐,我选的系统是 CentOS 7.6.
    g14r6K.jpg

    购买成功后

    • 在服务器页面直接点击登录即可直接登录 CentOS。
      g3xDb9.jpg

    • 点击重置密码 可 设置密码 或 创建新用户和密码。
      g3z95q.jpg
      g3zgds.jpg

    • 点击密钥创建密钥,并在服务器管理页面绑定密钥。(这步可先不设置)
      注:如果你绑定了密钥,那么将不能通过密码登录,通过密码登录会出现出现错误:PuTTY error: "No supported authentication methods available"
      这个问题的解决方法参考我另一篇博客:腾讯云设置密钥后无法通过 ssh 账号密码登录

    2.安装 PuTTY 和 WinSCP

    我们需要把本地代码上传到 CentOS 中,因而要下载 PuTTY 和 WinSCP。

    并把 PuTTY 设置为 WinSCP 的 集成应用程序(只要先安装 PuTTY,再装 WinSCP,系统会自行配置好,当然绿色版就需要手动配置了。)
    g3zqoR.jpg

    配置完后打开 WinSCP 远程登录云服务器。
    g3xyU1.jpg


    三、部署步骤

    开始安装之前先查看一下操作系统环境和 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 目录下即可
    g3xyU1.jpg

    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 的意思是强制删除



    参考资料


    1. 如何把 python 项目部署到 linux 服务器上 [https://www.cnblogs.com/huanghanyu/p/12921842.html]
    2. 大学生选择云服务器,腾讯云?阿里云?还是华为云?[https://smileyan.blog.csdn.net/article/details/96209253]
    3. Python 后台运行 —nohup 及 2>&1 详解 [https://blog.csdn.net/weixin_42840933/article/details/85780125]
    4. Centos 后台运行 python 程序 [https://www.cnblogs.com/liangblog/p/12762674.html]
    cs