【问题标题】:Cron executed python script runs but does not update sqlite dbCron 执行的 python 脚本运行但不更新 sqlite db
【发布时间】:2015-04-12 06:20:54
【问题描述】:

我的 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()

【问题讨论】:

    标签: python sqlite ubuntu cron


    【解决方案1】:

    我测试了您的代码,它对我来说似乎工作正常。几件事:

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

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

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

    【讨论】:

    • 每三分钟一次。它只是为了加快调试速度而频繁设置。该文件是可执行的,是的,它在“ubuntu”用户的 crontab 中。
    • 您可以尝试将作业从0/3 编辑到*/3 吗?另外,删除 db 文件,或手动将所有权更改为 ubuntu 用户。看看这是否有帮助。我只能说我在干净的 Xubuntu 安装上使用 Python 2.7.6。我复制了您的脚本(仅更改用户名),将用户的 crontab 设置为 */3 而不是 0/3,使文件可执行并且可以正常工作。作业运行,数据库文件创建或编辑正确,所有权正确。
    • 好的,作为部分解决方案,我删除了数据库,手动运行脚本,然后删除了第一行。所以我留下了一个有模式但没有行的数据库,现在它正在正确更新。所以从技术上讲,它现在可以工作了,但我仍然不知道问题出在哪里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2014-09-06
    相关资源
    最近更新 更多