2017/08/26 2020/03/15
Bottleはコマンドラインで起動すると終了でCTRL+Cを入れるまでコマンドプロンプトが戻ってきません。これでは不便と考えるなら自前でデーモン化してみましょう。最近ではBottleDaemonというモジュールもありますがオリジナルで色々開発しているとそのままではBottleDaemonが使えないケースが多いです。そんなときは自前でデーモン化処理を作ってしまいましょう。それほど難しいものではありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
from bottle import Bottle,template,abort import os,sys,time app = Bottle() @app.route('/hello/<name>') def index(name): return template('<b>Hello {{name}}</b>!', name=name) def daemon_serv(): pid = os.fork() try: if pid != 0: fd = open('./serv.pid','w') fd.write(str(pid) + '\n') fd.close() sys.exit() except OSError as e: sys.stderr.write("BottleFork: Failed: %d (%s)\n" % (e.errno, e.strerror)) sys.exit(1) while 1: app.run(server='paste',host="0.0.0.0",port='8080') if __name__ == "__main__": daemon_serv() |
◯ デーモンの起動と停止
1 2 |
$ start-serv $ stop-serv |
◯ 起動プログラム
1 2 3 4 5 6 7 |
#!/bin/sh ps -e|grep python if [ $? -eq 1 ]; then python mthread.py 2> /dev/null else echo "Serverを停止させてください" fi |
◯ 停止プログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/sh kill -9 `cat ./serv.pid` case $? in 0) rm ./serv.pid ;; 1) echo "プロセスを正しく終了できませんでした。" exit 1 ;; esac exit 0 |