1. 问题引入

通过Xshell工具连接远程阿里云服务器后,如何运行python程序呢?这个大家都知道,python命令啦。

举个栗子:通过Xshell在某个目录下输入命令:python test.py就执行了test.py这个程序。

但是如果我这个test.py要运行好久呢?比如运行好几天,难道要一直开着Xshell工具,开着本地电脑吗?有没有关掉Xshell连接服务器上的程序依旧运行的方法呢?

当然有啦~

2. 正文

本文就是来讲一下如何后台运行python程序的。

关键的命令:nohup

只需要输入下面的命令就可以在后台一直执行python程序啦

nohup python -u test.py > test.log 2>&1 &

这条命令的意思是,执行test.py程序,并把程序中执行的情况记录到test.log文件中,包括程序异常、程序中打印的信息等。
PS: 也可以把上述命令写成nohup python -u test.py > nohup.out 2>&1 &唯一的区别就是把日志信息写到nohup.out文件中去了,两种做法都行。

输入后,回车。会打印出一个进程号(我这里是4935)。

阿里下载python_阿里云服务器


通过ps -A命令查看当前运行的所有进程。你就会发现刚才生成的进程号在列出的进程里面啦。

阿里下载python_python_02


关掉Xshell,重新连接,再次ps -A命令查看当前运行的所有进程,哈哈,刚才的那个进程号还在。说明test.py程序还在执行。。。

3. 应用场景

这个方法有没有用呢?当然有用啦!!用处大大地!

  • 比如,我在处理一个220M的文txt文件,需要对其中的所有字符进行替换操作,在本地运行的话,运行3天也运行不完,总不能一直开着我的笔记本吧。买了个阿里云服务器闲着也是闲着,用这个方法就可以在服务器上一直运行啦~
  • 再比如,前一段写爬虫,也是这种情况。爬时光网所有短评,长评,用scrapy框架写的,运行在本地的话要运行几天,不知道要多久。这时候又可以放到阿里云服务器运行了~

这里稍微记录一下如何在远程服务器端后台运行scrapy爬虫程序

我们都知道,在本地运行scrapy程序只需要命令scrapy crawal myspider,那么在服务器端,如何运用上述后台运行python文件的方法来运行scrapy程序呢?

简单!再写一个python文件,如run.py,内容如下:

import os

if __name__ == '__main__':
    os.system("scrapy crawl myspider")

然后执行:nohup python -u run.py > run.log 2>&1 &

很显然了,就是在python文件中调用系统命令,运行scrapy crawl myspider这条命令啦。通过后台运行这个run.py文件,来执行scrapy crawl myspider这条命令,从而达到后台运行scrapy爬虫程序的目的。