使用gunicorn+flask框架,同时通过apscheduler实现对一款爬虫的定时调用,但是在这其中遇到了一个问题,如下:
1,我利用shell终端,通过gunicorn -c直接运行,然后通过flask构造url调用爬虫,并在终端观察输出信息,可以完美调用爬虫。但是当我运行gunicorn -c之后,关闭终端,则爬虫不能完美运行,通过对爬虫调试,发现在运行一段时间后就被终止。
2,之后我在爬虫中使用os.system('nohup python spider.py &'),并且一直打开终端可以完美运行,但是在关闭终端的情况下,又无法执行到底。
所以请问大家怎么来看一下这个脚本运行中为何自动结束。或者说产生的原因是什么。
ringa_lee2017-04-18 10:08:12
プロセスはターミナルを離れていません。ターミナルが閉じられた後、ターミナルに関連付けられているすべての子プロセスは何も出力せずに終了します。
spiider.py をターミナルの制御外のデーモン プロセスにすることをお勧めします。
高洛峰2017-04-18 10:08:12
バックグラウンドでプロセスを実行しますが、プロセスを開始した端末からは切り離されないため、親プロセスのシェル端末は閉じられ、子プロセスも閉じられます。
解決策 1 では、Linux でプロセスをデーモン プロセスにプログラムする方法を説明する「Linux で Python スクリプトをサービスまたはデーモンのように実行する方法」を参照してください。サンプルプログラムは長いので最後に説明します。
解決策 2、独自のプロセスをデーモン化できる Python ライブラリがあり、かなりの数があります。たとえば、Python デーモンです。使用例は次のとおりです。
リーリー追加の解決策 1 の処理:
リーリー