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)。
通过ps -A
命令查看当前运行的所有进程。你就会发现刚才生成的进程号在列出的进程里面啦。
关掉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爬虫程序的目的。