我的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()
答案 0 :(得分:1)
我测试了你的代码,它似乎对我来说很好。一些事情:
确保您正在crontab -e
编辑您的crontab,而不是sudo crontab -e
。
确保python文件可以chmod +x /home/ubuntu/fullstack/scrape.py
执行。
另外,0/3 * * * *
对我来说有点奇怪,不过我承认我对cron语法的了解有点不确定。 /3
表示"取每三分之一",但0表示在每小时的顶部进行。你是否每三个小时尝试一次(* */3 * * *
)?每隔三分钟(*/3 * * * *
)?