Drkcore

30 11 2012 Python javascript Tweet

Pythonとかのちょっとしたスクリプトをforeverでデーモン化する

pythonでちょっとしたクローラーを書いて終夜で流したい時に、夜中に落ちたりすると時間がもったいないので、死んでも生き返るようにしておきたいことがある。

追記121203

はてブで指摘された通り

forever start -c python crawler.py

で良かった。ドキュメントにちゃんと書いてあった。


node.jsで書いた場合にはforeverが使えて便利だが、他の言語で書いた場合にはchild_processで子プロセスにして呼び出せばいいので、javascriptをちょっと書いておけば、PythonでもPerlでもHaskellでもなんでも使える。

でもjavascriptを毎回書くのは(忘れるし)面倒なのでforever用のjavascriptを出力するスクリプトをpythonで書いてみた(foreverizeっていう名前)。

#!/usr/bin/env python

import sys

js_str = """var spawn = require('child_process').spawn;
var app   = spawn('{}', [{}]);
app.stdout.on('data', function(data) {{
  console.log('stdout: ' + data);
}});

app.stderr.on('data', function(data) {{
  console.log('stderr: ' + data);
}});

app.on('exit', function(code) {{
  console.log('exit code: ' + code);
}});
"""

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print "Usage: {} [command]".format(sys.argv[0])
    else:
        command = sys.argv[1]
        options = ""
        if len(sys.argv) >= 2:
            options = ",".join(["'{}'".format(op) for op in sys.argv[2:]])
        print js_str.format(command, options)

使い方は簡単

foreverize python crawler.py > crawler.js
forever start crawler.js

これで、デーモン化されて夜でも安心。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021