私は、プライマリマシンとセカンダリマシンの間で同期ファイルシステムを実装するために、単純なファイル同期デーモンをPythonで作成しています。重い持ち上げのほとんどはrsyncによって行われます。デーモンのSIGHUPシグナルの余波を処理するためにPython例外を使用できますか?
プライマリ側では定期的にrsyncを呼び出して、数秒間スリープしてから繰り返します。セカンダリ側では、subprocess.Popen()でrsyncdを生成し、終了するまで.wait()を実行します。しかし、私はSIGHUPを使ってデーモンの再設定を開始したいと思っています。私は、クリーンアップを処理する最良の方法が何であるか疑問に思っています。私が手しかし
rsync_args = [rsync_binary, "--daemon", "--no-detach", "--config=%s" % (config.name) ]
p = subprocess.Popen(rsync_args)
try:
p.wait()
if p.returncode != 0:
print "failed to spawn rsyncd"
return False
except fsync_config_exception:
print "spawn_and_monitor_rsyncd: config exceptions"
except:
(type, value, tb) = sys.exc_info()
print "we got %s with %s instead" % (type, value)
:
def signal_handler(signum, frame):
raise fsync_config_exception
そして:
私の最初の考えは、シグナルハンドラは、クリーンアップをトリガすることができます例外を発生持っていた
we got <type 'exceptions.TypeError'> with __init__() takes exactly 2 arguments (1 given) instead
予期しないfsync_config_exceptionの代わりに
この種の問題に対する最善のアプローチの提案は誰にもありますか?私は、シグナルコンテクストから例外を呼び出そうと、例外を酷く酷使しているのですか?
申し訳SIGHUPに応じて、何をする必要があるかんが(SIGHUPを受信した場合には注目に状態変数に追加のチェックで)信号によって殺された電子いる場合ではないだろうp.communicate()がよろしいですか? –