APScheduler定時執行外加supervisor管理後臺運行
阿新 • • 發佈:2017-08-29
shang shutdown err tar class ogg except blog ini
最近寫的天氣爬蟲想要讓它在後臺每天定時執行,一開始用的celery,但不知道為什麽明明設置cron在某個時間運行,但任務卻不間斷的運行。無奈轉用apscheduler,但是不管怎麽設置都不能使得當調用: python tasks.py 的時候都會阻塞在控制臺。再次無奈轉用supervisor。
首先是任務tasks.py:
#-*- coding: utf-8 -*- #!/usr/bin/python import datetime from apscheduler.schedulers.blocking import BlockingScheduler fromscrapy.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,則表示成功.
需要註意的是,如果在任務裏面有日誌輸出到文件,而文件沒有指定絕對路徑的話,默認是在根目錄生成,即在 ” / “ 目錄下。
APScheduler定時執行外加supervisor管理後臺運行