代码之家  ›  专栏  ›  技术社区  ›  Uriel Parienti

执行crontab作业时出现的问题

  •  0
  • Uriel Parienti  · 技术社区  · 8 年前

    我有一个简单的cron作业,它应该每15分钟发送一次邮件,并更新本地sqlite3 db文件。 问题是,虽然我确实正确地收到了邮件,但数据库中的表没有得到更新,

    import sys
    import Adafruit_DHT
    import time
    import sqlite3
    import datetime
    import smtplib
    
    print('Fierd!')
    print(datetime.datetime.now())
    humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 17)
    conn = sqlite3.connect('history.db')
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS history(id INTEGER PRIMARY KEY AUTOINCREMENT,temp real,humidty integer,time DATE )''')
    c.execute('''INSERT INTO history(temp,humidty,time) VALUES(?,?,?)''',(temperature,humidity,datetime.datetime.now()))
    conn.commit()
    conn.close()
    
    server = smtplib.SMTP('*************',587)
    server.starttls()
    server.login('******','********')
    msg =temperature
    server.sendmail('*******************','******************',repr(msg))
    server.quit()
    

    正如您所看到的,应该在将值插入db后发送邮件。 但我只收到邮件。 如果我手动运行它,它将按预期工作。

    编辑: 这是cron命令: */15****sudo python/home/pi/adafruit\u python\u DHT/examples/saveHistory。复制(&A)&燃气轮机/tmp/我的命令。日志#作业ID\u 1 有什么想法吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Lost    8 年前

    这里有几个可能发生的问题。

    1. 在crontab中不应该有sudo命令。这可能并且确实会导致问题。如果需要以提升的权限运行作业,则需要将其添加到sudo crontab $ sudo crontab -e

    2. 代码中的数据库只标识为历史记录。db,这意味着它与脚本位于同一文件夹中。但是,cron不在files文件夹中运行,它从cron根目录运行。这里有两个选项:

      --最好的方法可能是提供要加载的数据库的绝对路径,以便可以从任何工作目录中找到它

      --你可以 import os 然后执行 os.chdir() 将当前工作目录更改为数据库位置的步骤