不用开着电脑,如何将脚本代码放到服务器上?
作者 | sergiojune
转载自公众号日常学python(ID:daily_learn)
程序员转行学什么语言?
https://edu.csdn.net/topic/ai30?utm_source=csdn_bw
上次弄了个机器人,反响挺不错的,我也挺满意的,因为这个我也初步了解了服务器这个东西,懂得了如何将自己的脚本代码放到服务器上运行了,妈妈再也不怕我每天都得开着电脑才能运行脚本了,不过说实话,这个服务器真贵,不过有阿里云学生机,想尝试了解下的可以去试试,非常建议去折腾下,可以学到的东西很多。
当时为了将代码放到服务器上运行,也花了很多时间,所以避免还有不会的小白同学,记录下此过程,让他们少走点坑。
1. 购买服务器
如果你是学生的话,想折腾的可以去阿里云那里购买,因为有学生机优惠,只需要9.9一个月,但是只能购买一次,在下一次购买需要做任务才可以继续享用学生机优惠。如果你是土豪的话,可以直接忽略这个。
因为这次我只需要把机器人脚本运行就可以了,所以直接选择学生机的配置就够用了。
阿里云的学生机购买链接:
https://promotion.aliyun.com/ntms/act/campus2018.html?spm=5176.10695662.1244717.1.605c4804V5gfhs
点击购买即可。
这个密码是你登陆上服务器的密码,需要记住,登陆用户名就是 root。
接下来就是扫码支付了。
购买了点击阿里云控制台,点击云服务器ECS,就可以看到你刚才购买的服务器了。
再点击下面的云服务器,你就可以看到这个服务器的相关配置了
连接服务器可以在这个页面的右边的远程连接进行连接,这个第一次点进去会有个远程连接密码,需要记住,因为每次在这里进行远程连接的时候都需要填入这个密码。
连接成功就会显示一个黑色框,这里连接服务器虽然可以,但是不太方便,这里推荐大家一个在 window 的免费 ssh 连接工具 putty
2. 在服务器上配置 Python 环境
需要在服务器上运行 Python 脚本 ,就必须要在服务器上有 Python 的环境,在阿里云购买的学生机默认就装有 Python 的,不过版本是 2.7.5。这里我们重新安装 Python3,是这个服务器上可以多个版本共存。
先在 putty 上连接我们的服务器。
上面的 ip 地址就是我们购买的服务器的共有ip地址,使用 ssh连接就行了。不过还得设置一个东西,不设置的话,如果超过一段时间不动终端的话,就会自动断开,又得重新连接。
这里设置成 60 秒就可以了,原理我现在不太记得了,如果有读者知道的话,可以在留言区说下。
点击 open,然后填写用户名 root 和自己之前设置的密码即可登陆成功,如上图。
接下来就是开始安装我们的 Python3 环境了。
先查看下 centos 服务器的已安装的 Python 版本
python -V
我这里是 3.6.8 版本,因为我重新配置了,如果你第一次使用,这个结果是 python 2.7.5
查看 python 可执行文件的路径
可以看到所在的目录,进入这个 bin 目录,并查看 python 文件
可以看到我这里的 python 指向了 python3 这个文件,但是你们第一次的会指向 python2.7 这个文件,接下来就是将 python 这个软连接指向 python3 就行了。如果怕弄坏的,想备份原来 python2 的文件可以执行 mv python2.7 python.bak 就可以将文件备份到当前目录了。
安装 python3.6.8 版本
1)先安装相关包
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
需要需要确认时直接输入 y 即可
2)下载 python 3.6.8 源码包
如果觉得下载网速有点慢的话,可以更换阿里云源,可以参考这个连接:https://blog.csdn.net/qq_37274323/article/details/81107958
下载 python 3.6.8 包
https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
解压 python 3.6.8 源码包
tar xf Python-3.6.8.tar.xz -C /usr/local/src/
这个是将 python 源码包解压到文件夹 /usr/local/src 内,这里你也可以自己指定解压目录,你自己记得解压位置即可。
安装 python3
./configure --prefix=/usr/local/python3
这里的地址需要指定为自己的 python 源码包解压地址。
编译
make && make install
这时候可以说安装 python3 成功了,我们可以使用这个命令查看
/usr/local/python3/bin/pip3 list
更新 pip 版本
/usr/local/python3/bin/pip3 install --upgrade pip
也可以查看一下是否更新成功
/usr/local/python3/bin/pip3 list
3)建立软连接
现在就是需要将 python3 这个文件建立软连接,使 python 指向 python3 即可。
ln -s /usr/local/python3/bin/python3 /usr/bin/python
执行之后查看 python 版本
python -V
成功之后就会看到 python 指向了 python 3.6.8 版本,如果出错了
bash: python: command not found...
这个是你建立软连出问题了,可能指定的 python3 安装路径不正确,这时候将 python 这个软连接删除重新创建即可。
你可以进入 。/usr/bin 目录,查看是否创建软连接成功
若找到 python 这个指向为红色显示的,证明创建错误了,python3 的地址错误了。
这时就删除这个 python 软连接
再重新创建 python 软连接即可
ln -s /usr/local/python3/bin/python3 /usr/bin/python
这前面的地址就是 python3 的安装路径,就是有 python3 这个文件的目录。
4)修改 yum 配置
因为 yum 原来是使用 python2 的,改了 python3 之后可能会出错,所以需要重新配置。
修改 yum 文件
vi /usr/bin/yum
把文件头部的#!/usr/bin/python改成#!/usr/bin/python2.7保存,然后按esc,输入 :wq 退出即可
修改 urlgrabber-ext-down 文件
vi /usr/libexec/urlgrabber-ext-down
第一行改为#!/usr/bin/python2.7,然后按esc,输入 :wq 退出即可
现在就完成了 python 环境的配置了。
3. 下载相关库
为了方便管理,我这里使用了虚拟环境,防止每个脚本运行时所需要的库进行冲突,如果你暂时没有想那么复杂,只是想运行一次脚本而已,也可以不必要使用虚拟环境,不过还是建议使用虚拟环境的,毕竟始终都需要用到的。
1)下载 virtualenv 库
这个是创建 虚拟环境使用的库。
pip3 install virtualenv
注意:这里使用的是 pip3,若是直接使用 pip 则对应的是 python2 版本的。
2)下载 virtualenvwrapper-win 库
这个库是为了方便管理虚拟环境使用的
pip3 install virtualenvwrapper-win
下载完了还需要配置环境变量
vim ~/.bashrc
在末尾添加上这两句
export WORK_HOME=$HOME/.virtualenvs
source /usr/local/python3/bin/virtualenvwrapper.sh
第一句是固定的,第二句为指定 virtualenvwrapper 安装的路径
激活配置
source ~/.bashrc
然后进入你想创建虚拟环境的路径,输入以下命令
mkvirtualenv py3_test
创建成功之后会自动进入该虚拟环境
但是这里默认使用的是 python2 版本指定的虚拟环境,需要使用 python3 版本可以指定版本创建
指定 python 版本创建虚拟环境
mkvirtualenv py3 --python=python
上面使用 --python 参数来指定 python 版本,因为 python 这个文件是指向 python3 的,所以可以这样使用,当然你也可以填上你 python3 版本的位置,这时虚拟环境的 python 版本就是 3 了。
3. 下载机器人相关库
这里就是在虚拟环境中使用 pip3 安装 itchat 和 requests 库(用于爬虫获取早报)即可
4. 上传脚本到服务器
由于服务器上原本就带有 ftp 服务器的,所以我们只需要在本地安装个 fileZilla 客户端进行连接即可,自己去官网下载即可。
这里填上自己的服务器 ip 地址和连接账号和密码 ,点击连接即可
连接成功之后,左边就是我们服务器上面的文件了,右边就是本地文件,右击需要上传的文件选择上传即可。上传成功之后即可在服务器上看到相关文件。
接下来就是运行脚本了。
5. 在服务器上运行脚本
可以直接像在本地一样运行脚本
python robot.py
这样就可以 运行成功了,但是我们在关闭连接之后,这个脚本就停止了,那岂不是还是需要开着电脑挂机?
别急,我们可以在后台运行脚本啊,这样即使关闭连接,也一样在运行。使用命令如下:
nohup python robot.py
这时你可以查看进程
ps -ef | grep python
就会看到我们刚才 robot 代码已经运行起来了,这个就是在后台运行,关闭连接之后一样会运行,这下就放心了。
但是,如果发生错误的话,我们是无法知道哪里出错的,这时我们指定日志输出文件
nohup python -u robot.py > robot.log 2>&1 &
-u 就是指定实时的日志输出目录,而 & 符号是使程序在后台运行,一边运行还可以一边查看日志输出文件,这里的 robot.log 就是我们的日志输出文件。
还有一个问题,我想停止机器人怎么办?可以使用这个命令
kill PID
这里 PID 为 linux 系统上的进程号,要想停止哪个后台程序就填上它对应的 PID 即可,查看 PID
ps -ef | grep python
箭头所指就是 PID 了。
最后
由于我现在的知识水平有限,暂时只能说明这么多,这些都是我当初在第一次使用时所做的记录,如有错误,还请帮忙指出。同时还参考了几篇文章:
https://www.cnblogs.com/sanduzxcvbnm/p/5984352.html
https://blog.csdn.net/miner_zhu/article/details/81315974
https://blog.csdn.net/eastmount/article/details/79321822
如何挑战百万年薪的人工智能!
https://edu.csdn.net/topic/ai30?utm_source=csdn_bw
(本文为 AI科技大本营转载文章,转载请联系原作者)
群招募
扫码添加小助手微信,回复:公司+研究方向(学校+研究方向),邀你加入技术交流群。技术群审核较严,敬请谅解。
推荐阅读:
曝贾扬清第二跳,加入阿里!达摩院或将承载中国下一个AI愿景?
投稿近2000,NAACL 2019接收率仅为22.6%|附录取论文名单
如何从零开始用PyTorch实现Chatbot?(附完整代码)
Python语音识别终极指南(收藏)
被感冒折磨一周后,我研究了一下生病这件事
北京程序媛图鉴 | 程序员有话说
阿里云又宕机!
一部刷爆朋友圈的5G短片,看完才知道5G多暖多重要!
20万赚200万,48岁创业者是这样吊打小鲜肉的!
为啥程序员下班后只关显示器从不关电脑?
❤点击“阅读原文”,查看历史精彩文章。
相关文章:

【Qt】ubuntu14.04+qt5.6+opencv2.4编程注意事项
cv::imshow();//不能在QT中使用该接口来创建窗口 否侧会报错: (:1103): Gtk-WARNING **: gtk_disable_setlocale() must be called before gtk_init() (:1103): GLib-CRITICAL **: Source ID 52 was not found when attempting to remove it 参见:ht…

Docker完整建站详介
2019独角兽企业重金招聘Python工程师标准>>> 一,在主服务器上操作:安装完成docker;略 二,查看镜像 [rootlocalhost ~]#docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos/shop2.web.top latest 8fc9b211671a 14…

word2007启用宏
word选项-》信任中心->启用宏

用Python分析《工作细胞》的一万多条评论后,非漫迷也要入番了
作者 | 量化小白一枚,上财研究生在读,专注于数据分析与量化投资 来源 | 量化小白上分记(公众号 id:quanthzp) 责编 | Jane 人工智能的现状及今后发展趋势如何? https://edu.csdn.net/topic/ai30?utm_so…

【VritualBox】虚拟机VirtualBox中ubuntu下加载USB设备报错:busy with a previous request.Plaease try again later
1、问题描述 在VirtualBox中添加USB设备时,报错: USB device with ‘SanDisk Crurer Blade’UUID {*} is busy with a previous request.Plaease try again later 返回 代码: E_INVALIDARG(0x80070057) 组件: HostUSBDeviceWrap 界面: I…

谈谈动态规划的思想
动态规划( dynamic programming )算法是解决多阶段决策过程最优化问题的一种常用方法,难度比较大,技巧性也很强。利用动态规划算法,可以优雅而高效地解决很多贪婪算法或分治算法不能解决的问题。动态规划算法的基本思想…

关于ARM启动的一篇文章
时间:2010-12-28 09:22:36 来源:老古开发网 作者:写的不错, 应该对大家有所帮助: 基于ARM的芯片多数为复杂的片上系统,这种复杂系统里的多数硬件模块都是可配置的,需要由软件来设置其需要的工作状态。因此在用户的应用程序之前,需…

【Qt】QImage加载bmp位图数据
QImage直接加载bmp文件 QImage image(image.bmp); QImage加载已经获取的bmp数据 unsigned char *imageData = NULL; int imageLen = (102*3+2)*126+54; imageData = (unsigned char*)malloc(imageLen); FILE*stream; if((stream=fopen("image.bmp","r")…

CVPR 2019审稿满分论文:中国博士提出融合CV与NLP的视觉语言导航新方法
整理 | 刘畅、Jane 责编 | Jane 出品 | AI科技大本营(公众号id:rgznai100) 如何挑战百万年薪的人工智能! https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw CVPR 2019 接收论文编号公布以来,AI科技大本营开始陆续…
有无目标的人生差10倍!赶紧和娃把新年计划做起来
春节连续几天朋友圈都是吃吃喝喝、陪父母陪娃、游山玩水,一派国泰民安的祥和状。昨晚一大学闺蜜突发感概,哎, 2018都快过1/6了,新年计划还没开始做,难道还是只能一声轻叹“今年一定是非常有意义的一年”吗?…

installshield 2009实现安装包自动编译
1.根据当前日期,在服务器上建立一个以日期命名的文件夹,删除本地现有的文件夹并下载最新的文件到本地call mydate %DATE%Rem Copy files from common folder on the designer to the common folder on my computerrd "F:\MySourceFile\MMS2.0\progr…

首发 | 旷视14篇CVPR 2019论文,都有哪些亮点?
译者 | Linstancy 责编 | Jane 出品 | AI科技大本营(公众号id:rgznai100) 回顾 CVPR 2018 ,旷视科技有 8 篇论文被收录,如高效的移动端卷积神经网络 ShuffleNet、语义分割的判别特征网络 DFN、优化解决人群密集遮挡问…

【Qt】Qt多屏编程,在指定显示屏上显示指定对话框
问题描述 主机连接两个显示器,一主一副,要求主显示器显示主界面,副显示器显示一对话窗口 解决方法 使用QDesktopWidget QDialog dlg = new QDialog(this); QDesktopWidget* desktop = QApplication::desktop(); this->setGeometry(desktop->screenGeometry(0)); …

Kruskal算法 - C语言详解
最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。 例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。 克鲁斯卡尔…

JavaScript初学者应注意的七个细节
每种语言都有它特别的地方,对于JavaScript来说,使用var就可以声明任意类型的变量,这门脚本语言看起来很简单,然而想要写出优雅的代码却是需要不断积累经验的。本文利列举了JavaScript初学者应该注意的七个细节,与大家分…

开学季,教你用Python画大学教室座位神分区图!网友直呼“中枪”
作者 | 丁彦军转载自恋习Python(ID:sldata2017)我们上过大学的朋友们都知道,大学没有固定教室也没有固定的座位,所以大家可以随便找个自己喜欢的位置坐下。别看这些不起眼的座位,感觉没什么差别。其实,它们…

【Qt】在ubuntu上打包发布Qt程序,可以不依赖Qt环境
参考博客 https://blog.csdn.net/theArcticOcean/article/details/68069964 https://blog.csdn.net/hjl_1991/article/details/50365927 亲测过程 1、编译处release版本的Qt程序 2、创建打包文件夹 mkdir release 3、进入文件夹,将要打包的程序拷贝到文件中 cd r…

Smart template的控件能否当成普通控件来用
我的同事问过我这个问题: 只要弄清楚Smart control的原理,就能回答这个问题。 答案是: smart control可以像普通的控件一样在xml view中被定义和使用,但是必须结合OData annotation,否则没有意义。以Smart control里的Smart field…

60行代码爬取知乎“神回复”,句句戳中泪点
作者 | shenzhongqiang转载自Python与数据分析(ID:PythonML)之前的一篇文章《爬了下知乎神回复,笑死人了~》发布后,引发了大家热烈的反响。很多朋友觉得很神奇,在后台问强哥是怎么做到的,有的朋友还表示不太…

IDC行业前景,机遇与挑战并存
中国互联网信息中心(CNNIC)发布了截至2010年6月底中国互联网发展基本情况的报告。在这半年一次的例行报告中,照例有些鼓舞人心的好消息。报告显示中国网民规模达到4.2亿,较09年底增长2.9%,宽带普及率达到98.1%,宽带网民规模为3.64…

【Ubuntu】Ubuntu14.04添加163的源
1、简单的两步 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo wget -O /etc/apt/sources.list http://mirrors.163.com/.help/sources.list.trusty sudo apt update2、注意 这是更改Ubuntu14.04的源,针对ubuntu其它版本参见博客 【Ubuntu】将Ub…
用模板实现单例模式(线程安全)、模板方式实现动态创建对象
一、用模板实现单例模式 在前面的文章中,用过多种方法实现单例模式,现在用模板方式来实现: 为了实现线程安全,需要在linux 下使用pthread_mutex_t 加锁,请使用g 编译并需要链接 -lpthread 使用的是double-check lock&a…

推荐系统召回四模型之全能的FM模型
作者 | 张俊林作者简介:中国中文信息学会理事,中科院软件所博士。目前在新浪微博 AI Lab 担任资深算法专家。在此之前,张俊林曾经在阿里巴巴任资深技术专家并负责新技术团队,以及在百度和用友担任技术经理及技术总监等职务。同时他…

MIDP2.0引入了Push注册机制
PushMIDP2.0引入了Push注册机制,作为一种允许应用被自动启动的方法,由预先设置的警告或者经inbound连接收到的消息。 通过这种方法,MIDlets可以用来设置处理规则事件,如定时从服务器上同步数据,或者非规则事件如一个突…

【OpenCV】cv::Mat和std::vector之间的相互转换
Mat转换成Vector 以vector 为例,其它模型类似 vector getVector(const Mat & a) { Mat b; a.convertTo(b, CV_64F); return (vector)(b.reshape(1, 1)); } Vector转换成Mat 使用Mat的构造函数 std::vector responses; cv::Mat tres; tres Mat(resp…

mysql数据库密码忘记恢复脚本
#!/bin/bashread -p "请输入你要修改的密码:" passwordskipawk /skip-grant-tables/{print $1} /etc/my.cnfif [ ! -n "$skip" ];then ##判断是否有skip-grant-tablessed -i /^[mysqld]/askip-grant-tables /etc/my.cnf ##变量为空就执行插入el…

-16 | 12 等于多少
2019独角兽企业重金招聘Python工程师标准>>> 今天同事问到一个问题 -16 | 12 等于多少? 从教材中知道,二进制数的第一位是符号位,正数为0,负数为1,再根据取反的定义可得到如下算式(假设整形是占…

深度学习在自动驾驶感知领域的应用
程序员转行学什么语言? https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw 本次直播课程是由深度学习资深研究者-杨阳博士从百度Apollo自动驾驶感知技术出发,讲解环境感知中深度学习的实用性与高效性。 课程从Apollo 3.5感知技术介绍、自动驾驶中的目…

【Qt】QObject::moveToThread 总结
原型 void QObject::moveToThread(QThread *targetThread) 功能 将QObject及其孩子移动到 指定线程(targetThread)中。它的事件将在targetThread线程中处理。 注意事项 1、该对象不能有parent,否则无法移动。 2、如果targetThread为零,…

中国联通备战5G MWC发布《Edge-Cloud平台架构及产业生态白皮书》
2月26日-3月1日,中国联通受邀参加2018MWC世界移动通信大会,作为本次大会GSMA智慧城市展区参展的唯一中国运营商,中国联通提出以服务为驱动的面向5G网络切片的演进思路,为客户提供4G到5G演进阶段的一致性的网络服务&…