Cron执行了python脚本运行,但没有更新sqlite db

时间:2015-02-11 18:33:45

标签: python sqlite ubuntu cron

我的python脚本(如果需要,创建)并在sqlite数据库中插入一行。它在手动运行时完美运行,但在cron运行时则不行。当由cron运行时,它将创建没有模式的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 个答案:

答案 0 :(得分:1)

我测试了你的代码,它似乎对我来说很好。一些事情:

  1. 确保您正在crontab -e编辑您的crontab,而不是sudo crontab -e

  2. 确保python文件可以chmod +x /home/ubuntu/fullstack/scrape.py执行。

  3. 另外,0/3 * * * *对我来说有点奇怪,不过我承认我对cron语法的了解有点不确定。 /3表示"取每三分之一",但0表示在每小时的顶部进行。你是否每三个小时尝试一次(* */3 * * *)?每隔三分钟(*/3 * * * *)?