APScheduler定時執行外加supervisor管理后台運行


       最近寫的天氣爬蟲想要讓它在后台每天定時執行,一開始用的celery,但不知道為什么明明設置cron在某個時間運行,但任務卻不間斷的運行。無奈轉用apscheduler,但是不管怎么設置都不能使得當調用: python  tasks.py 的時候都會阻塞在控制台。再次無奈轉用supervisor。

首先是任務tasks.py:

#-*- coding: utf-8 -*-
#!/usr/bin/python

import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
from scrapy.crawler import CrawlerProcess
from province_spider import ProvinceSpider
from billiard import Process

from scrapy.utils.log import configure_logging
configure_logging({'LOG_FORMAT': '%(levelname)s: %(message)s', 'LOG_FILE': 'schedule.log'})

def _crawl(path=None):
     crawl = CrawlerProcess({
         'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
     })
     crawl.crawl(ProvinceSpider)
     crawl.start()
     crawl.stop()

def run_crawl(path=None):
    p = Process(target=_crawl, args=['hahahahha'])
    p.start()
    #p.join()

scheduler = BlockingScheduler(daemon=True)
scheduler.add_job(run_crawl, "cron", hour=8, minute=30, timezone='Asia/Shanghai')
scheduler.add_job(run_crawl, "cron", hour=12, minute=30, timezone='Asia/Shanghai')
scheduler.add_job(run_crawl, "cron", hour=18, minute=30, timezone='Asia/Shanghai')

try: 
    scheduler.start() 
except (KeyboardInterrupt, SystemExit): 
    scheduler.shutdown()

 

設置成8點半、12點半、18點半是因為天氣數據是一天更新三次,分別在8點,12點,18點,有圖為證:

直接執行:python tasks.py可以執行任務,但是會在控制台阻塞。這個時候要用supervisor。 

 

ubuntu安裝: apt-get install supervisor

 

開始:

    1. 進行/etc/supervisor/conf.d 目錄,新建weather_aps.conf文件,文件內容為:

[program:weather_aps]
command=python /var/my_git/WeatherCrawler/aps/tasks.py
autorstart=true
stdout_logfile=/var/my_git/WeatherCrawler/aps/log/weather_aps.log

   2. 啟動supervisor:  

/etc/init.d/supervisor start

   3. 啟動成功后,查看weather_aps的狀態:

supervisorctl status weather_aps

    如果是running,則表示成功.

 

需要注意的是,如果在任務里面有日志輸出到文件,而文件沒有指定絕對路徑的話,默認是在根目錄生成,即在 ”  / “ 目錄下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM