2016-09-08 5 views
0

Я написал сценарий Python, который будет работать бесконечно. Он контролирует каталог с использованием PyInotify и использует модуль Multiprocessing для запуска любых новых файлов, созданных в этих каталогах, через внешний скрипт. Все это отлично работает.Служба Python - запись имени файла с отметкой времени

Проблема, с которой я столкнулась, заключается в записи вывода в файл. Имя, которое я выбрал, использует текущую дату (с использованием datetime.now) и теоретически должен катиться по часу, каждый час.

now = datetime.now() 
filename = "/data/db/meta/%s-%s-%s-%s.gz" % (now.year, now.month, now.day, now.hour) 
with gzip.open(filename, 'ab') as f: 
    f.write(json.dumps(data) + "\n") 
    f.close() #Unsure if I need this, here for debug 

К сожалению, когда часы катятся - выход останавливается и никогда не возвращается. Никакие исключения не выбрасываются, он просто перестает работать.

total 2.4M 
drwxrwxr-x 2 root root 4.0K Sep 8 08:01 . 
drwxrwxr-x 4 root root 12K Aug 29 16:04 .. 
-rw-r--r-- 1 root root 446K Aug 29 16:59 2016-8-29-16.gz 
-rw-r--r-- 1 root root 533K Aug 30 08:59 2016-8-30-8.gz 
-rw-r--r-- 1 root root 38K Sep 7 10:59 2016-9-7-10.gz 
-rw-r--r-- 1 root root 95K Sep 7 14:59 2016-9-7-14.gz 
-rw-r--r-- 1 root root 292K Sep 7 15:59 2016-9-7-15.gz #Manually run 
-rw-r--r-- 1 root root 834K Sep 8 08:59 2016-9-8-8.gz 

Эти файлы на самом деле не принадлежит корню, просто изменили их для общественного потребления

Как вы можете видеть, все файлы меток времени заканчиваются на: 59 и следующий час никогда не бывает.

Есть ли что-то, что я должен принять во внимание при этом? Есть ли что-то, что у меня пропало без возможности запуска скрипта Python?


После осмотра. Кажется, что PyInotify была моей проблемой. См. Здесь()

ответ

2

Я скорректировал ваш код, чтобы изменить имя файла каждую минуту, что ускоряет отладку совсем немного и все же проверяет гипотезу.

import datetime 
import gzip, time 
from os.path import expanduser 
while True: 
    now = datetime.datetime.now() 
    filename = expanduser("~")+"/%s-%s-%s-%s-%s.gz" % (now.year, now.month, now.day, now.hour, now.minute) 
    with gzip.open(filename, 'a') as f: 
     f.write(str(now) + "\n") 
     f.write("Data Dump here" + "\n") 
    time.sleep(10) 

Это похоже на проблему без проблем. Смена часового пояса моего компьютера также была снята и обработана. Я подозреваю, учитывая приведенное выше, что ваша ошибка может лежать в другом месте, и требуется некоторая разумная отладочная печать значений в ключевых точках. Попробуйте использовать более подробное имя файла, как указано выше, чтобы ускорить отладку.

+0

Я подозреваю, что вы правы. Он может лежать с самим кодом PyInotify. Я буду использовать ваш код для отладки. – gleb1783

+0

См. Обновление - вы были правы. – gleb1783

+0

Рад слышать, что вы его взломали - спасибо за обновление! –