使用gunicorn+flask框架,同时通过apscheduler实现对一款爬虫的定时调用,但是在这其中遇到了一个问题,如下:
1,我利用shell终端,通过gunicorn -c直接运行,然后通过flask构造url调用爬虫,并在终端观察输出信息,可以完美调用爬虫。但是当我运行gunicorn -c之后,关闭终端,则爬虫不能完美运行,通过对爬虫调试,发现在运行一段时间后就被终止。
2,之后我在爬虫中使用os.system('nohup python spider.py &'),并且一直打开终端可以完美运行,但是在关闭终端的情况下,又无法执行到底。
所以请问大家怎么来看一下这个脚本运行中为何自动结束。或者说产生的原因是什么。
你这个进程没有脱离终端,终端关闭后,和终端关联的所有子进程全被终止,没有任何输出。
建议把spaider.py做成daemon进程,脱离终端的控制。
logging
谢谢大家的答案,真正的原因已经找到,是因为由于调试过程的print输出过多,导致超过缓存,导致进程结束。
虽然你将进程放在后台执行,但是并没有跟启动该进程的终端detach,因此,父进程shell终端关闭,子进程也将被关闭。
解决方案1,可以参考How to make a Python script run like a service or daemon in Linux,教你如何在linux下编程将进程做成daemon进程。示例程序比较长,我放在最后讲解吧。
解决方案2,有python库可以将自身进程daemon化,而且挺多的。比如,python-daemon。使用示例如下:
补充解决方案1的处理: