2016-08-30 6 views
0

私は次の問題を解決しています:スクリプトがクラッシュする前にコール関数を呼び出しますか?

私は24時間いつもサービスとして動作するスクリプトを持っています。それは非常に重要なので、私はそれがクラッシュする場合は私に電子メールを送信したいと思います。私はatexitモジュールを見つけましたが、ドキュメントは特にクラッシュを処理できないと言います。

私の質問です:この1つが実行されているかどうかを確認する別のserivceを実行するよりも、これを達成する方法がありますか?または、ここでの目標は、クラッシュできないようにサービスを書くことです(ほとんど不可能です)。

あなたのアイデアをお寄せいただきありがとうございます。

+0

クラッシュ-yがこのクラッシュでどのように?私たちはここで未処理の例外、またはセグメンテーションのようなものを話していますか? 'atexit' exitハンドラは未処理の例外の場合でも実行されます。 – user2357112

+0

すべてのタイプのクラッシュを処理することはできません。そのうちのいくつかは前述のsegfaultや 'SIGTERM'のように「uncatchable」です。あなたができることは、[スーパーバイザー](http://supervisord.org/index.html)のような外部ツールを使用して、あなたのための起動/再起動を処理し、その[events]を使用することです(http://supervisord.org/events .html)あなたは電子メールを送るために 'FATAL'状態に入っているプロセスのために聞くことができます。同じプロセスにプロセスを監視するメカニズムを組み込むことは危険です。 – Yakuza

+0

私は監督者のツールを見て、それは唯一の正しいaproachだと思われます。ありがとうございます – karlosss

答えて

0

最初の部分では、try/exceptを使用してスクリプトの主要部分をラップするだけです。

myscript.py:

def main(): 
    long_running_process() 

if __name__ == '__main__': 
    try: 
     main() 
    except: 
     send_email() 
+0

セグメンテーションフォルトの場合、これは動作する機会がありません。 – karlosss

+0

そう、上のように、スーパーバイザー、アップスタート、init.dなどのサービスモニターが必要です。 – postelrich

関連する問題