为什么一个程序如果手动激活会很好地工作,而不是作为使用 crontab、mysql 和 python 的守护进程?

Why would a program work well if activated manually but not as a daemon using crontab, mysql and python?

我们有这段代码,其目的只是在 MySQLWorkbench 中发布到数据库中:

import pymysql.cursors
import os, time
import datetime

#Conexion a la base de datos
conn = pymysql.connect(‘example.example.us-west-2.rds.amazonaws.com', user= ‘xxxx', port= xxxx,     passwd = ‘xxxxx', db=‘xxxx')

def query():
    fecha = (str) (datetime.datetime.now())
    nfecha = fecha.split(' ')
    dia = nfecha[0]
    hora = nfecha[1]
    tabla='notificaciones'
    idcliente='1'
    notificacion='hola'
    tipo='saludo'
    with conn.cursor() as cursor:
        cursor.execute('insert into notificaciones(idcliente, notificacion, tipo, fecha, hora)     values(%s, %s, %s, %s, %s)', (idcliente, notificacion, tipo, dia, hora))
        conn.commit()

    print('success')


def main():
    query()

main()

当在控制台中手动执行时,代码运行良好,但是,当我们想将它设置为守护进程时,使用 crontab,它什么也做不了。

在crontab中试过这样:

sudo su
crontab -e
@reboot sudo python /home/pi/Desktop/DataBase.py

我试过从另一个程序调用它,并且已经作为一个单独的程序调用它。根本没用。

求助。

sudo 不在 crontab 命令中 运行。它通常需要配置显式 tty 或 visudo 异常。

如果您确实需要 sudo 权限,请在 root 用户下配置此 crontab(不使用 sudo),您似乎已经在这样做了。就这些了。

sudo su
crontab -e
@reboot python /home/pi/Desktop/DataBase.py

这种情况的解决方案是:程序需要互联网连接,然后它需要一些时间才能开始提供足够的时间,因此 OS 出现并建立互联网连接。解决了向程序添加计时器或睡眠以便首先连接互联网的问题。