使用gunicorn+flask框架,同时通过apscheduler实现对一款爬虫的定时调用,但是在这其中遇到了一个问题,如下:
1,我利用shell终端,通过gunicorn -c直接运行,然后通过flask构造url调用爬虫,并在终端观察输出信息,可以完美调用爬虫。但是当我运行gunicorn -c之后,关闭终端,则爬虫不能完美运行,通过对爬虫调试,发现在运行一段时间后就被终止。
2,之后我在爬虫中使用os.system('nohup python spider.py &'),并且一直打开终端可以完美运行,但是在关闭终端的情况下,又无法执行到底。
所以请问大家怎么来看一下这个脚本运行中为何自动结束。或者说产生的原因是什么。
Votre processus n'a pas quitté le terminal. Une fois le terminal fermé, tous les processus enfants associés au terminal seront terminés sans aucune sortie.
Il est recommandé de faire de spaider.py un processus démon, hors du contrôle du terminal.
journalisation
Merci pour vos réponses. La vraie raison a été trouvée. C'est parce que trop de sorties d'impression pendant le processus de débogage dépassent le cache et entraînent la fin du processus.
Bien que vous exécutiez le processus en arrière-plan, il n'est pas détaché du terminal qui a démarré le processus. Par conséquent, le terminal shell du processus parent est fermé et le processus enfant sera également fermé.
Solution 1, vous pouvez vous référer à Comment faire fonctionner un script Python comme un service ou un démon sous Linux, qui vous apprend à programmer un processus en processus démon sous Linux. L’exemple de programme est assez long, je l’expliquerai donc à la fin.
Solution 2, il existe des bibliothèques python qui peuvent démoniser leurs propres processus, et il y en a pas mal. Par exemple, python-démon. Les exemples d'utilisation sont les suivants :
Traitement supplémentaire de la solution 1 :