执行crontab作业时出现问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了执行crontab作业时出现问题相关的知识,希望对你有一定的参考价值。

我有一个简单的cron作业,应该每15分钟发送一次邮件并更新本地的sqlite3 db文件。问题是当我确实正确地收到邮件时,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有什么想法吗?

答案

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

  1. 您的crontab中不应该有sudo命令。这可能而且确实会引起问题。如果您需要使用提升的权限运行作业,则需要将其添加到sudo crontab $ sudo crontab -e
  2. 您的代码中的数据库只是标识为history.db,这意味着它与您的脚本位于同一文件夹中。但是,cron不会在files文件夹中运行,而是从cron根目录运行。你有两个选择: - 可能最好是提供要加载的数据库的绝对路径,以便可以从任何工作目录中找到它 - 你可以import os然后做一个os.chdir()来将当前的工作目录更改为您的数据库的位置

以上是关于执行crontab作业时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

执行谷歌数据流作业时出现 HTTP 传输错误

使用 Testcontainers 执行运行集成测试的 Gitlab CI 管道作业时出现问题

crontab调用python时出现ImportError: No module named XXX的问题

使用 strncpy 时出现异常

在片段java类中使用“this”和getLastSignedInAccount时出现错误[重复]

运行 Gitlab CI 作业以使用 webdriverio 执行自动化测试时出现“加载共享库时出错:libnss3.so”