답변:
실행 nohup python bgservice.py &
중지 신호를 무시하고 계속 실행되도록 스크립트를 가져옵니다. 출력은 nohup.out
.
이상적으로는 supervise
(언제) 죽으면 다시 시작할 수 있도록 다음과 같이 스크립트를 실행 하는 것이 좋습니다.
somecommand &
그것을 한 후에 일부 쉘 (bash, zsh 등) 에서 pid를 인쇄합니다 [1] 12345
. 그렇지 않으면 $!
.
여기에 설명 된대로 Python 스크립트를 적절한 Python 데몬으로 바꾸는 것을 고려할 수 있습니다 .
python-daemon 은 영원히 실행되는 스크립트가 아닌 백그라운드 데몬 프로세스로 Python 스크립트를 실행하는 데 사용할 수있는 좋은 도구입니다. 기존 코드를 약간 수정해야하지만 단순하고 간단합니다.
python-daemon에 문제 가있는 경우 동일한 작업을 수행하는 다른 유틸리티 관리자 가 있지만이 경우 데몬 화를 위한 즉시 사용 가능한 솔루션이므로 코드를 작성 (또는 기존 수정) 할 필요가 없습니다. 프로세스.
다음은 데코레이터를 사용하는 Python 내부의 간단한 솔루션입니다.
import os, time
def daemon(func):
def wrapper(*args, **kwargs):
if os.fork(): return
func(*args, **kwargs)
os._exit(os.EX_OK)
return wrapper
@daemon
def my_func(count=10):
for i in range(0,count):
print('parent pid: %d' % os.getppid())
time.sleep(1)
my_func(count=10)
#still in parent thread
time.sleep(2)
#after 2 seconds the function my_func lives on is own
물론 bgservice.py
파일 의 내용 을 my_func
.
zsh을의 쉘은 nohup을 실행하는 모든 백그라운드 프로세스를 만들 수있는 옵션이 있습니다.
에서 ~/.zshrc
라인을 추가 :
setopt nocheckjobs #don't warn about bg processes on exit
setopt nohup #don't kill bg processes on exit
그런 다음 다음과 같은 프로세스를 실행하면됩니다. python bgservice.py &
더 이상 nohup 명령을 사용할 필요가 없습니다.
나는 많은 사람들이 zsh를 사용하지 않는다는 것을 알고 있지만, 내가 추천하고 싶은 정말 멋진 쉘입니다.
로그인 여부에 관계없이 프로세스가 영원히 실행되어야하는 경우 프로세스를 데몬으로 실행하는 것이 좋습니다.
supervisord 는 모든 프로세스를 데몬 화하는 데 사용할 수있는 탁월한 솔루션입니다. supervisorctl
감독자가 실행중인 프로세스를 모니터링하는 데 사용할 수있는 또 다른 제어 유틸리티 가 있습니다.
이 작업을 수행하기 위해 추가 코드를 작성하거나 기존 스크립트를 수정할 필요가 없습니다. 더욱이 장황한 문서는이 프로세스를 훨씬 더 간단하게 만듭니다.
python-daemon에 대해 몇 시간 동안 머리를 긁적 후에 supervisor가 몇 분 만에 나를 위해 일한 솔루션입니다.
이것이 파이썬 데몬을 작동시키는 데 도움이되기를 바랍니다.
Yapdi를 사용할 수도 있습니다 .
기본 사용법 :
import yapdi daemon = yapdi.Daemon() retcode = daemon.daemonize() # This would run in daemon mode; output is not visible if retcode == yapdi.OPERATION_SUCCESSFUL: print('Hello Daemon')
nohup: ignoring in put and appending output to
nohup.out'` 메시지가 표시 되고 Enter 키를 누르면 프로세스가 상태 1로 종료됩니다. 무슨 일입니까?