用python写了一个脚本凌晨的时候执行计息。
# coding=utf-8
import datetime
import sys
import os
import MySQLdb
import logginglogging.basicConfig(filename = os.path.join(os.getcwd(), '/home/sh/log.txt'), level = logging.DEBUG)
#logging.basicConfig(filename = os.path.join(os.getcwd(), 'C:\\Users\\xumingxun\\workspace\\wutong_script\\log.txt'), level = logging.DEBUG)
logging.debug('start1') try:
lines=open(sys.argv[1],'rb').readlines()
# lines=open('C:\\Users\\xumingxun\\workspace\\wutong_script\\db.properties','rb').readlines()
for line in lines:
ss=line.split('=')
if len(ss)>1:
ss[0]=ss[0].strip()
ss[1]=ss[1].strip()
if ss[0]=='ip':
ip=ss[1]
elif ss[0]=='dbname':
dbname=ss[1]
elif ss[0]=='port':
port=int(ss[1])
elif ss[0]=='username':
username=ss[1]
elif ss[0]=='password':
password=ss[1]
logging.debug('start2')
now=datetime.datetime.now()
over_time=now.strftime('%Y-%m-%d')
logging.debug('start3')
conn=MySQLdb.connect(host=ip,user=username,passwd=password,db=dbname,port=port,charset='utf8')
# conn=MySQLdb.connect(host='localhost',user='root',passwd='123456',db='wutong3',port=3306,charset='utf8')
cur=conn.cursor()
logging.debug('start4')
count=cur.execute('select uid,zid,money,sum(total) as total,ex_rate,zrate from anyinvest_backup where backupdate=\"'+over_time+'\" group by uid,zid,money')
result=cur.fetchall()
logging.debug('start5')
for row in result:
。这里是大循环
logging.debug('start9')
conn.commit()
cur.close()
conn.close()
logging.debug('start10')
except MySQLdb.Error,e:
print "Mysql Error %d:%s" % (e.args[0],e.args[1])
logging.debug("Mysql Error %d:%s" % (e.args[0],e.args[1]))
使用的数据库是阿里云的RDS
平时都是用定时任务执行脚本
之前都是好好的,突然有一天定时任务就不能用了,查看日志,定时任务已经运行了脚本,但是没有执行完,执行到2200次循环的时候,断了,而且没有输出错误或异常日志。更奇怪的是,在命令行手工执行脚本是可以运行的。每次定时任务执行脚本失败,都是停在 第2200次循环中,然后中断,没有输出异常。似乎是数据超过了某个值之后,定时器执行脚本就不行了。于是每天晚上都要在凌晨起来手工执行一下,然后才能睡觉。
求解?
# coding=utf-8
import datetime
import sys
import os
import MySQLdb
import logginglogging.basicConfig(filename = os.path.join(os.getcwd(), '/home/sh/log.txt'), level = logging.DEBUG)
#logging.basicConfig(filename = os.path.join(os.getcwd(), 'C:\\Users\\xumingxun\\workspace\\wutong_script\\log.txt'), level = logging.DEBUG)
logging.debug('start1') try:
lines=open(sys.argv[1],'rb').readlines()
# lines=open('C:\\Users\\xumingxun\\workspace\\wutong_script\\db.properties','rb').readlines()
for line in lines:
ss=line.split('=')
if len(ss)>1:
ss[0]=ss[0].strip()
ss[1]=ss[1].strip()
if ss[0]=='ip':
ip=ss[1]
elif ss[0]=='dbname':
dbname=ss[1]
elif ss[0]=='port':
port=int(ss[1])
elif ss[0]=='username':
username=ss[1]
elif ss[0]=='password':
password=ss[1]
logging.debug('start2')
now=datetime.datetime.now()
over_time=now.strftime('%Y-%m-%d')
logging.debug('start3')
conn=MySQLdb.connect(host=ip,user=username,passwd=password,db=dbname,port=port,charset='utf8')
# conn=MySQLdb.connect(host='localhost',user='root',passwd='123456',db='wutong3',port=3306,charset='utf8')
cur=conn.cursor()
logging.debug('start4')
count=cur.execute('select uid,zid,money,sum(total) as total,ex_rate,zrate from anyinvest_backup where backupdate=\"'+over_time+'\" group by uid,zid,money')
result=cur.fetchall()
logging.debug('start5')
for row in result:
。这里是大循环
logging.debug('start9')
conn.commit()
cur.close()
conn.close()
logging.debug('start10')
except MySQLdb.Error,e:
print "Mysql Error %d:%s" % (e.args[0],e.args[1])
logging.debug("Mysql Error %d:%s" % (e.args[0],e.args[1]))
使用的数据库是阿里云的RDS
平时都是用定时任务执行脚本
之前都是好好的,突然有一天定时任务就不能用了,查看日志,定时任务已经运行了脚本,但是没有执行完,执行到2200次循环的时候,断了,而且没有输出错误或异常日志。更奇怪的是,在命令行手工执行脚本是可以运行的。每次定时任务执行脚本失败,都是停在 第2200次循环中,然后中断,没有输出异常。似乎是数据超过了某个值之后,定时器执行脚本就不行了。于是每天晚上都要在凌晨起来手工执行一下,然后才能睡觉。
求解?
for row in result: -- 这里可以做个判断,<2200次,执行conn.commit(); 如果大于2200次,再执行第二个for循环,也可以外面嵌套一层for循环啊。
。这里是大循环
logging.debug('start9')
conn.commit()
也和脚本没有关系,
感觉是被定时任务器从外部粗暴地中断了
是不是内存使用太大,或者时间过长?超过定时任务器的设置参数。