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()
每隔三分鐘。這只是爲了加速調試而經常設置的。該文件是可執行的,是的,它在「ubuntu」用戶的crontab中。 – thekthuser 2015-02-11 19:13:31
你可以嘗試從'0/3'編輯作業到'*/3'嗎?另外,刪除db文件,或手動將所有權更改爲ubuntu用戶。看看是否有幫助。我只能說,我在乾淨的Xubuntu安裝上使用Python 2.7.6。我複製了你的腳本(只改變用戶的名字),用'*/3'而不是'0/3'設置用戶的crontab,使得該文件可執行並且工作。作業運行時,DB文件被正確創建或編輯,並且所有權是正確的。 – paidhima 2015-02-11 19:23:11
好吧,作爲一個部分解決方案,我刪除了數據庫,手動運行腳本,然後刪除了第一行。所以我留下了一個具有模式的數據庫,但沒有行,現在它正在更新。所以技術上它現在正在工作,但我仍然不知道問題是什麼。 – thekthuser 2015-02-11 19:36:13