Python 스크립트가 bgservice.py
있고 내가 빌드하는 웹 서비스의 일부이기 때문에 항상 실행되기를 원합니다. SSH를 로그 아웃 한 후에도 계속 실행되도록하려면 어떻게해야합니까?
답변
실행 nohup python bgservice.py &
중지 신호를 무시하고 계속 실행되도록 스크립트를 가져옵니다. 출력은 nohup.out
.
이상적으로는 supervise
(언제) 죽으면 다시 시작할 수 있도록 다음과 같이 스크립트를 실행 하는 것이 좋습니다.
답변
이미 프로세스를 시작했고 프로세스를 종료하고 nohup 상태에서 다시 시작하고 싶지 않다면 백그라운드로 보낸 다음 소유를 취소 할 수 있습니다.
Ctrl+Z
(프로세스 중지)
bg
(백그라운드에서 프로세스를 다시 시작
disown %1
(이것이 작업 # 1이라고 가정 jobs
하고 결정 하는 데 사용)
답변
거의 모든 Linux / Unix 시스템에 있어야 하는 GNU 화면 을 사용할 수도 있습니다 .
Ubuntu / Debian을 사용하는 경우 향상된 변형 byobu 도 꽤 좋습니다.
답변
여기에 설명 된대로 Python 스크립트를 적절한 Python 데몬으로 바꾸는 것을 고려할 수 있습니다 .
python-daemon 은 영원히 실행되는 스크립트가 아닌 백그라운드 데몬 프로세스로 Python 스크립트를 실행하는 데 사용할 수있는 좋은 도구입니다. 기존 코드를 약간 수정해야하지만 단순하고 간단합니다.
python-daemon에 문제 가있는 경우 동일한 작업을 수행하는 다른 유틸리티 관리자 가 있지만이 경우 데몬 화를 위한 즉시 사용 가능한 솔루션이므로 코드를 작성 (또는 기존 수정) 할 필요가 없습니다. 프로세스.
답변
당신은 그것을 할 수 있지만 나는 screen을 선호합니다 .
답변
다음은 데코레이터를 사용하는 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를 사용하지 않는다는 것을 알고 있지만, 내가 추천하고 싶은 정말 멋진 쉘입니다.