2015-02-11 78 views
0

我的python腳本(如果需要可以創建)並將一行插入sqlite數據庫。它可以在手動運行時完美運行,但在由cron運行時不會運行。當由cron運行時,它將創建數據庫文件,但不包含模式,也不會插入該行。Cron執行python腳本運行但不更新sqlite db

此外,該命令在我的普通用戶的crontab中設置,但空的db文件由root擁有。

這是我的crontab行:

0/3 * * * * /home/ubuntu/fullstack/scrape.py 

這是python腳本:

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

#file scrape.py 

import urllib2 
import json 
import datetime 
import time 
import sqlite3 

from datetime import timedelta 

response = urllib2.urlopen('http://api.ihackernews.com/page') 
res = response.read() 
date = response.info()['date'] 
#          Sun, 19 Oct 2014 17:58:01 GMT 
datetime = datetime.datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %Z') 
datetime = datetime - timedelta(hours=5) 
timestamp = int(time.mktime(datetime.timetuple())) 
response.close() 
res = json.loads(res) 

title = res['items'][0]['title'] 
url = res['items'][0]['url'] 
points = res['items'][0]['points'] 



db = sqlite3.connect('/home/ubuntu/fullstack/interval_data.db') 
cursor = db.cursor() 
cursor.execute(''' 
    CREATE TABLE IF NOT EXISTS data(id INTEGER PRIMARY KEY NOT NULL UNIQUE, title TEXT, url TEXT, points INTEGER, timestamp INTEGER, datetime TEXT); 
''') 
db.commit() 

cursor.execute('''INSERT INTO data(title, url, points, timestamp, datetime) 
    VALUES(?, ?, ?, ?, ?);''', (title, url, points, timestamp, datetime.strftime('%d %b %Y, %I:%M %p %z'))) 
db.commit() 




db.close() 

回答

1

我測試你的代碼,它似乎爲我工作的罰款。有幾件事情:

  1. 確保你正在做crontab -e編輯您的crontab,不sudo crontab -e

  2. 確保python文件是可執行的chmod +x /home/ubuntu/fullstack/scrape.py

此外,0/3 * * * *看起來有點奇怪我,雖然我承認我的cron語法知識是一個有點玄乎。 /3說「每三分之一」,但0表示在每小時的頂部做。你想每三小時做一次(* */3 * * *)嗎?每三分鐘(*/3 * * * *)?

+0

每隔三分鐘。這只是爲了加速調試而經常設置的。該文件是可執行的,是的,它在「ubuntu」用戶的crontab中。 – thekthuser 2015-02-11 19:13:31

+0

你可以嘗試從'0/3'編輯作業到'*/3'嗎?另外,刪除db文件,或手動將所有權更改爲ubuntu用戶。看看是否有幫助。我只能說,我在乾淨的Xubuntu安裝上使用Python 2.7.6。我複製了你的腳本(只改變用戶的名字),用'*/3'而不是'0/3'設置用戶的crontab,使得該文件可執行並且工作。作業運行時,DB文件被正確創建或編輯,並且所有權是正確的。 – paidhima 2015-02-11 19:23:11

+0

好吧,作爲一個部分解決方案,我刪除了數據庫,手動運行腳本,然後刪除了第一行。所以我留下了一個具有模式的數據庫,但沒有行,現在它正在更新。所以技術上它現在正在工作,但我仍然不知道問題是什麼。 – thekthuser 2015-02-11 19:36:13