yanom blog

様々な技術について書きます

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()

ひとまず、これで上手いこと動きました。
が、本当にこの方法で良いのかは分かりません。
誰か詳しい人教えて下さい。

dreamerdream.hateblo.jp