Python PyMySQL不是从Cron连接,而是从控制台连接

Python PyMySQL不是从Cron连接,而是从控制台连接,python,mysql,sockets,cron,pymysql,Python,Mysql,Sockets,Cron,Pymysql,我有一个通过pyMySQL连接到MySQL数据库的脚本 当我从控制台手动执行它时,它就像一个符咒,但当我运行此cronjob时,它会给出以下输出: @reboot sudo python3/var/www/html/ls/src/AppBundle/Command/crawl.py true>/tmp/listener.log 2>&1 结果: 为什么呢?我遵循了这一切,但没有取得任何成功 任何暗示都感谢 编辑 我尝试过的事情: connect = pymysql.connect(host=co

我有一个通过
pyMySQL
连接到MySQL数据库的脚本

当我从控制台手动执行它时,它就像一个符咒,但当我运行此cronjob时,它会给出以下输出:

@reboot sudo python3/var/www/html/ls/src/AppBundle/Command/crawl.py true>/tmp/listener.log 2>&1

结果: 为什么呢?我遵循了这一切,但没有取得任何成功

任何暗示都感谢

编辑 我尝试过的事情:

connect = pymysql.connect(host=constants.HOST,
                          user=constants.USERNAME,
                          passwd=constants.PASSWORD,
                          db=constants.DATABASE,
                          charset='utf8mb4',
                          port=constants.PORT,
                          unix_socket=constants.SOCKET,
                          cursorclass=pymysql.cursors.DictCursor)
常数.py
这个问题可能是由以下原因引起的 1.服务器配置 还是你的 2.python代码

对于第2点,为了确保将代码从错误中排除,请尝试以下操作:

import MySQLdb
def dbconnect():
    try:
        db = MySQLdb.connect(
            host='localhost',
            user='root',
            passwd='XXX',
            db='myDB'
        )
    except Exception as e:
        sys.exit(e)
    return db
print dbconnect()
此代码在股票RHEL服务器上运行whit cron:

* * * * * root /var/www/html/myApp/stopClock/stopClock.py
如果这不起作用,并且您收到相同的错误,则问题在于您的服务器cron配置:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/var/www/html/myApp
这是我用的。当然,我第一行代码中的Shebang:

#!/usr/bin/env python

这个问题可能是由以下原因引起的 1.服务器配置 还是你的 2.python代码

对于第2点,为了确保将代码从错误中排除,请尝试以下操作:

import MySQLdb
def dbconnect():
    try:
        db = MySQLdb.connect(
            host='localhost',
            user='root',
            passwd='XXX',
            db='myDB'
        )
    except Exception as e:
        sys.exit(e)
    return db
print dbconnect()
此代码在股票RHEL服务器上运行whit cron:

* * * * * root /var/www/html/myApp/stopClock/stopClock.py
如果这不起作用,并且您收到相同的错误,则问题在于您的服务器cron配置:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/var/www/html/myApp
这是我用的。当然,我第一行代码中的Shebang:

#!/usr/bin/env python

当我的python3代码从cron@reboot执行连接到本地主机数据库时,我也遇到了错误111。python3代码在shell中执行时运行良好。经过多次调试,我发现数据库连接建立得太快了。我在代码中添加了以下内容:

import subprocess

while subprocess.Popen('service mysqld status', shell=True, stdout=subprocess.PIPE).stdout.read().decode('utf-8').find('Active: active') == -1:
     sleep(1)
#once mysql is ready it will break out of while loop and continue to
connection = pymysql.connect(host='localhost'............the rest of your code

希望这有帮助。

当我的python3代码从cron@reboot执行连接到本地主机数据库时,我也遇到了错误111。python3代码在shell中执行时运行良好。经过多次调试,我发现数据库连接建立得太快了。我在代码中添加了以下内容:

import subprocess

while subprocess.Popen('service mysqld status', shell=True, stdout=subprocess.PIPE).stdout.read().decode('utf-8').find('Active: active') == -1:
     sleep(1)
#once mysql is ready it will break out of while loop and continue to
connection = pymysql.connect(host='localhost'............the rest of your code

希望这能有所帮助。

我猜您的客户端试图连接到错误的套接字或端口,请参阅添加
unix\u socket='/var/run/mysqld/mysqld.sock',
(文件存在)或特别添加正确的端口似乎都不能奏效。套接字将错误更改为
[Errno 2]没有这样的文件或目录)
。您使用什么主机名连接?使用“localhost”将调用套接字文件连接,使用“127.0.0.1”将调用网络连接。我猜您的客户端试图连接到错误的套接字或端口,请参阅添加
unix\u socket='/var/run/mysqld/mysqld.sock',
(文件存在)或特别添加正确的端口似乎都不会起作用。套接字将错误更改为
[Errno 2]没有这样的文件或目录)
。您使用什么主机名连接?使用“localhost”将调用套接字文件连接,使用“127.0.0.1”将调用网络连接。目前,我使用一个在登录时启动脚本的守护程序,它工作起来令人惊讶,但实际上并不是我想要的。。。因此,结论是代码应该是sth,但是为什么手动调用时它会工作呢?很好,这样你就离解析更近了一步,你能粘贴代码吗,尤其是开始时,连接到MySQL的那部分呢?还要检查您的var/log/messages,查看您使用cron启动的模块上是否有错误,例如:
Jan 23 09:47:07 Approt abrt:detected unhandled Python exception in'/var/www/html/myApp/cleaner.py'
它确实有效,说
。目前,我使用一个在登录时启动脚本的守护程序,它工作起来令人惊讶,但实际上并不是我想要的。。。因此,结论是代码应该是sth,但是为什么手动调用时它会工作呢?很好,这样你就离解析更近了一步,你能粘贴代码吗,尤其是开始时,以及连接到MySQL的部分?还要检查您的var/log/messages,查看您使用cron启动的模块是否存在错误,例如:
Jan 23 09:47:07 Approt abrt:detected unhandled Python exception in'/var/www/html/myApp/cleaner.py'