使用gunicorn+flask框架,同时通过apscheduler实现对一款爬虫的定时调用,但是在这其中遇到了一个问题,如下:
1,我利用shell终端,通过gunicorn -c直接运行,然后通过flask构造url调用爬虫,并在终端观察输出信息,可以完美调用爬虫。但是当我运行gunicorn -c之后,关闭终端,则爬虫不能完美运行,通过对爬虫调试,发现在运行一段时间后就被终止。
2,之后我在爬虫中使用os.system('nohup python spider.py &'),并且一直打开终端可以完美运行,但是在关闭终端的情况下,又无法执行到底。
所以请问大家怎么来看一下这个脚本运行中为何自动结束。或者说产生的原因是什么。
프로세스가 터미널을 떠나지 않았습니다. 터미널이 닫힌 후에는 터미널과 연결된 모든 하위 프로세스가 출력 없이 종료됩니다.
spaider.py를 터미널의 제어를 벗어나 데몬 프로세스로 만드는 것이 좋습니다.
로깅
진짜 원인을 찾았습니다. 디버깅 중에 인쇄 출력이 너무 많아 캐시를 초과하여 프로세스가 종료되기 때문입니다.
백그라운드에서 프로세스를 실행하더라도 프로세스를 시작한 터미널에서 분리되지 않으므로 상위 프로세스 셸 터미널이 닫히고 하위 프로세스도 닫힙니다.
해결책 1, Linux에서 프로세스를 데몬 프로세스로 프로그래밍하는 방법을 알려주는 Python 스크립트를 Linux에서 서비스 또는 데몬처럼 실행하는 방법을 참조할 수 있습니다. 샘플 프로그램이 꽤 길어서 마지막에 설명하겠습니다.
해결책 2, 자체 프로세스를 데몬화할 수 있는 Python 라이브러리가 있고 그 수가 꽤 많습니다. 예를 들어 python-daemon입니다. 사용 예는 다음과 같습니다.
으아아아추가 솔루션 1 처리:
으아아아