私はPythonスクリプトをいくつかのオブジェクトを使ってfor-loopsし、xml-formatのURLからデータを取り出してMySQLデータベースに格納します。私は以下のスクリプトの(簡略化した)バージョンを添付しました。 Windowsタスクスケジューラを使用してスクリプトを1日に1回実行するようにスケジュールを設定します。スクリプトとスケジューリングはほとんどの場合うまく機能しますが、月に1回または2回、スクリプトは記録された例外なしで途中で突然終了します。スクリプトが終了したことを検出して手動でスクリプトを再実行すると、問題はなく、何も変更せずに完了します。スクリプトが途中で終了したときにWindows Schedulerが問題を報告することはありません。つまり、「履歴」タブは、すべてが計画どおりに動作した場合と同様に、アクション完了/タスク完了を報告します。WindowsスケジューラでPythonスクリプトが予期せず終了する
スクリプトの簡易版:
for Obj in objects:
t=0
dbdata = ''
logger.info('Object: {s}\tID: {i}'.format(s=Obj.name, i=Obj.id))
try:
url = 'http://www.xyz.com/webproxy/DataProxy.aspx?Object=' + Obj.id
logger.debug(url)
data = urlopen(url)
dom = minidom.parse(data)
for node in reversed(dom.getElementsByTagName('t')):
dbdata = dbdata + str(node.getAttribute('t')) + '\t' + str(float(node.getAttribute('p'))) + '\t' + str(int(node.getAttribute('v'))) + '\t' + str(node.getAttribute('id')) + '\t' + str(node.getAttribute('b')) + '\t' + str(node.getAttribute('s')) + '\n'
t=t+1
if len(dbdata)>0:
cursor.execute(sql,(Obj.id,Obj.name,daydb,dbdata))
logger.info('# rows: {n}'.format(n=t)
except HTTPError, e:
logger.error(e.msg)
logger.error('HTTPError. Error code: ' + str(e.code))
except ExpatError, ex:
logger.error(ex.msg)
logger.error('Expat Error. Error code: ' + str(ex.code))
except Exception, e:
logger.error(e.msg)
logger.error('Exception. Error code: ' + str(e.code))
スクリプトはしばらく途中で一度の終了や、なぜ誰もが任意のアイデアを持っています私は、スクリプトまたはにスケジューリングに何かできることがあればこの問題を回避するか、少なくとも何が起こっているかを明確にするありがとう
をキャッチこの方法は、あなたが全くのログを持っていない場合は、唯一の理由なぜそれが起こるのかは 'objects == []'です。あなたは 'オブジェクト'がどのように作られているかを示すコードを投稿しませんでした。もう1つの可能性は、ログファイル/ stdoutへの書き込みを開けなかったためにロガーが例外を投げたことです。 – astevanovic
OK、私はスクリプト全体を含んでいませんでした。私はログを生成し、正常に動作するように見えるログを持っています。スクリプトが予期せず終了した場合、ログは100個のアイテムのうち50個を取得し、ログにはスローされた例外やその他の問題の兆候は見られません。単にスケジューラ(?)がスクリプトを終了したかのように見えます。 – hgus1294
スクリプトが終了する前に例外が発生した場合、ログバッファが実際にフラッシュされていますか?たぶん例外がありましたが、ログに記録されませんでした。それは私が考えることができる唯一のことです...そうでなければ、あなたのスケジューラはプロセスを殺しています。 – astevanovic