我编写了一个可以无限期运行的 Python 脚本。它使用模块监视目录,PyInotify
并使用该Multiprocessing
模块通过外部脚本运行在这些目录中创建的任何新文件。这一切都很好。
我遇到的问题是将输出写入文件。我选择的文件名使用当前日期(使用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
这些文件并不是真正由 root 拥有,只是将它们更改为公共消费
如您所见,所有文件的时间戳都以 :59 结束,下一小时永远不会发生。
这样做时我应该考虑什么?是否有一些我无限期地运行 Python 脚本的东西?
偷看之后。似乎 PyInotify 是我的问题。见这里(https://unix.stackexchange.com/questions/164794/why-doesnt-inotifywatch-detect-changes-on-added-files)