У меня есть сценарий Python, который for-loops через некоторые объекты и извлекает данные из url в xml-формате и сохраняет его в MySQL db. Я прикрепил (упрощенную) версию сценария ниже. Я планирую запуск сценария один раз в день с помощью Планировщика заданий Windows. Сценарий и планирование работают отлично, но один или два раза в месяц сценарий неожиданно заканчивается где-то на полпути без каких-либо занесенных в журнал исключений. Когда я обнаруживаю, что сценарий завершен и вручную перезапущен скрипт, он завершается без каких-либо проблем и без каких-либо изменений. Планировщик Windows никогда не сообщает о каких-либо проблемах, когда сценарий заканчивается преждевременно, т. Е. Вкладка «История» только сообщает о завершенных действиях/заданиях, как это происходит, когда все работает так, как планировалось.Сценарий Python неожиданно заканчивается с Windows Scheduler
Упрощенная версия сценария:
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 == []'. Вы не опубликовали какой-либо код, чтобы показать, как создаются «объекты». Другая возможность заключается в том, что логгер выбрал исключение, потому что он не мог открыть запись в файл журнала/stdout. – astevanovic
ОК, я не включил весь сценарий. У меня есть журнал, который производит журналы и работает нормально. Когда сценарий заканчивается неожиданно, журналы выглядят так, как будто он только сделал это на полпути, извлекая, возможно, 50 из 100 элементов, а журналы не показывают признаков исключений или каких-либо других проблем. Это похоже на то, что кто-то, может быть, планировщик (?), Прекратил выполнение сценария. – hgus1294
Вы уверены, что буфер журнала фактически покраснел, когда исключение происходит до завершения сценария? Возможно, было исключение, но он никогда не попадал в журнал. Это единственное, о чем я могу думать ... В противном случае ваш планировщик убивает процесс. – astevanovic