【问题标题】:issues when executing crontab job执行 crontab 作业时的问题
【发布时间】:2018-03-05 12:43:00
【问题描述】:

我有一个简单的 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()

如您所见,邮件应在值插入数据库后发送。 但我只接收邮件。 如果我手动运行它,它会按预期工作。

编辑: 这是 cron 命令: */15 * * * * sudo python /home/pi/adafruit_python_DHT/examples/saveHistory.py &> /tmp/mycommand.log # JOB_ID_1 有什么想法吗?

【问题讨论】:

  • 你也可以分享一下crontab条目吗?
  • 这里可能的问题似乎是 history.db 正在从另一个文件位置连接。

标签: python cron debian


【解决方案1】:

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

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

  2. 您的代码中的数据库被标识为 history.db,这意味着它与您的脚本位于同一文件夹中。但是,cron 不在文件夹中运行,它从 cron 根目录运行。你有两个选择:

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

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

【讨论】:

  • 谢谢!确实在根文件夹中找到了另一个 db 文件,其中包含过去 2 天的所有缺失信息。
猜你喜欢
  • 1970-01-01
  • 2020-06-19
  • 2015-12-04
  • 2018-06-14
  • 2011-07-26
  • 2021-12-24
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多