2016-09-08 4 views
0

無限に実行するPythonスクリプトを書きました。 PyInotifyを使用してディレクトリを監視し、Multiprocessingモジュールを使用して、これらのディレクトリで作成された新しいファイルを外部スクリプトを通じて実行します。それはすべて素晴らしいです。Pythonサービス - タイムスタンプ付きのファイル名を書く

私が抱えている問題は、出力をファイルに書き込むことです。私が選択したファイル名は現在の日付(datetime.nowを使用)を使用しており、理論的には1時間ごとにロールバックする必要があります。

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が私の問題だったようです。 ここで(https://unix.stackexchange.com/questions/164794/why-doesnt-inotifywatch-detect-changes-on-added-files

答えて

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) 

これは問題なく実行されるようです。私のPCのタイムゾーンを変更することも拾い集められました。私は、あなたのエラーは他の場所にあるかもしれないと思っていますが、キーポイントで値の賢明なデバッグ印刷が必要です。上記のように、より細かいファイル名を使用して、デバッグを高速化してください。

+0

あなたが正しいと思う。それはPyInotifyコードそのものにあるかもしれません。あなたのコードを使ってデバッグを支援します。 – gleb1783

+0

更新を参照してください - あなたは正しいです。 – gleb1783

+0

更新していただきありがとうございます。 –

関連する問題