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'