用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次循环中,然后中断,没有输出异常。似乎是数据超过了某个值之后,定时器执行脚本就不行了。于是每天晚上都要在凌晨起来手工执行一下,然后才能睡觉。
求解?

解决方案 »

  1.   

    mysql 事务,可以参考:http://blog.csdn.net/mchdba/article/details/12837427
      

  2.   

    如果手工可以,则看来不是在MYSQL端的问题了。建议检查你自己的程序。 是不是超时被停止了?
      

  3.   

    尝试一下:
    for row in result:  -- 这里可以做个判断,<2200次,执行conn.commit(); 如果大于2200次,再执行第二个for循环,也可以外面嵌套一层for循环啊。
    。这里是大循环
        logging.debug('start9') 
        conn.commit()
      

  4.   

    看不出和mysql事务自动回滚有任何问题
    也和脚本没有关系,
    感觉是被定时任务器从外部粗暴地中断了
    是不是内存使用太大,或者时间过长?超过定时任务器的设置参数。