파이썬으로 자동화할때 죽지않고 계속 일정 간격으로 명령어를 실행하는 스크립트가 필요할때가 있다.
답은 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 서버를 실행하는 코드를 예시로 들어보았다.
서버는 죽지않고 항상 잘 돌아가야되며 서버가 죽었을 경우를 대비해서 지속적으로 감시후 재실행하는 아주 유요한 스크립트이다.
이외로 응용하면 꺼지면 안되는 프로그램이나 지속적으로 감시하는 기능에 유용하게 응용할 수 있다.