// 1. 페이지의 에서 최대한 위에 이 코드를 붙여넣으세요. // 아래의 메타 태그를 복사해 사이트 홈페이지의 섹션에 붙여 넣어주세요. //2. 여는 태그 바로 뒤에 코드를 붙여넣으세요.

새소식

반응형
Python/자동화

python 죽지않는 daemon 스크립트 짜기

  • -
반응형

파이썬으로 자동화할때 죽지않고 계속 일정 간격으로 명령어를 실행하는 스크립트가 필요할때가 있다.

 

답은 daemon을 사용하면 된다.

 

코드부터 보자

import socket
import subprocess
import time
import os
import sys
import daemon
from daemon import pidfile
from daemon import runner
import argparse


def runPortChecker():
    while True:
        time.sleep(5)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex(('127.0.0.1', 8000))  # ip, port

        if result == 0:
            print("Port is Open")
        else:
            print("")
            print("Port is not Open")
            os.system("pwd")
            os.system("python /home/user/app/backend/main.py")

def doTask():
    "new session create"
    os.setsid()
    os.open("/dev/null", os.O_RDWR)
    os.dup(0)
    os.dup(0)

    runPortChecker()

def runDaemon():
    try:
        pid = os.fork()

        if pid > 0:
            print('PID: %d' % pid)
            sys.exit()

    except OSError as error:
        print('Unable to fork. Error: %d (%s)' % (error.errno, error.strerror))
        sys.exit()

    doTask()

if __name__ == '__main__':
    runDaemon()
반응형

runPortChecker메서드에서 8000포트로 돌아가고 있는 pid가 없을 경우 backend 서버를 실행하는 코드를 예시로 들어보았다. 

 

서버는 죽지않고 항상 잘 돌아가야되며 서버가 죽었을 경우를 대비해서 지속적으로 감시후 재실행하는 아주 유요한 스크립트이다. 

 

이외로 응용하면 꺼지면 안되는 프로그램이나 지속적으로 감시하는 기능에 유용하게 응용할 수 있다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.