serviceで起動したアプリを正しく起動する
最近、今更ながらserviceで起動するアプリを作成しています。
処理としては、service startされたらデーモン化して常時動くようなアプリになっています。
その際、/var/run/配下にpidファイルを作成します。
問題
- /var/run/配下のpidファイルが作成出来なかった場合でも、アプリが起動してしまう
これは、sudoでアプリを起動しなかった場合に、/var/run/配下の書き込み権限がなくpidファイルが作成出来ないのですが、アプリはお構いなしに起動してしまうという話です。
対処
def daemonize(): pid = os.fork() if pid > 0: try: pid_file = open(pid_file_path, 'w') except Exception as e: logger.error(e) os.kill(0, signal.SIGKILL) #pidファイル作成に失敗した場合に子プロセスをkillする sys.exit(2) pid_file.write(str(pid) + "\n") pid_file.close() sys.exit() if pid == 0: main()
ひとまず、これで上手いこと動きました。
が、本当にこの方法で良いのかは分かりません。
誰か詳しい人教えて下さい。