programing

SSH를 로그아웃한 후에도 백그라운드에서 스크립트를 실행하는 방법은 무엇입니까?

i4 2023. 7. 20. 21:43
반응형

SSH를 로그아웃한 후에도 백그라운드에서 스크립트를 실행하는 방법은 무엇입니까?

파이썬 스크립트가 있습니다.bgservice.py제가 만든 웹 서비스의 일부이기 때문에 항상 실행되기를 원합니다. 해야 합니까? SSH 파일 이름은 무엇입니까?

려달을 합니다.nohup python bgservice.py &스크립트가 전화 끊기 신호를 무시하고 계속 실행되도록 합니다.은 출이입력다니됩력다로 입력됩니다.nohup.out.

스크립트가 중단된 경우 다시 시작할 수 있도록 스크립트를 실행하는 것이 이상적입니다.

프로세스를 이미 시작했지만 종료 후 다시 시작하지 않으려면 백그라운드로 전송한 다음 거부할 수 있습니다.

Ctrl+Z (프로세스 확인)

bg합니다.)

disown %1#1일 )jobs결정)

백그라운드에서 Python 스크립트 실행

먼저 Python 스크립트에서 다음과 같은 쉐방 라인을 추가해야 합니다.

#!/usr/bin/env python3

이 경로는 여러 버전의 Python이 설치되어 있는 경우에 필요합니다./usr/bin/env사용자의 첫 번째 파이썬 인터프리터가$$PATH환경 변수가 사용됩니다.인터프리터의 : 파이썬 또인경의예하수있다습니할딩코드를한터:#!/usr/bin/python3 기계에서 할 수 .), 그나러이유않으다른서휴에대수없다니습할터퓨.다음으로 실행을 허용하도록 파일의 권한을 설정해야 합니다.

chmod +x test.py

이제 전화 끊기 신호를 무시하는 스크립트를 실행할 수 있습니다.즉, 실행을 중지하지 않고 터미널을 닫을 수 있습니다.또한 추가하는 것을 잊지 마십시오.&스크립트가 백그라운드에서 실행됩니다.

nohup /path/to/test.py &

추하지않경을 추가하지 shebang대신 다음 명령으로 스크립트를 실행할 수 있습니다.

nohup python /path/to/test.py &

은 출은다저니다에 됩니다.nohup.out다음과 같이 출력 파일을 지정하지 않는 한 파일:

nohup /path/to/test.py > output.log &
nohup python /path/to/test.py > output.log &

명령의 출력을 다른 곳으로 리디렉션한 경우 - 다음을 포함합니다./dev/null대신 그곳이 그것이 가는 곳입니다.

# doesn't create nohup.out

nohup command >/dev/null 2>&1   

를 사용하는 nohup 명령어를 하려는 것을 입니다.&모든 것의 끝에:

# runs in background, still doesn't create nohup.out

 nohup command >/dev/null 2>&1 &  

다음을 찾을 수 있습니다.process그리고 그것들process ID다음 명령을 사용합니다.

ps ax | grep test.py

# or
# list of running processes Python

ps -fA | grep python

ps의 약자process status

실행을 중지하려면 kill 명령을 사용하여 실행을 중지할 수 있습니다.

kill PID

당신은 또한 거의 모든 리눅스/유닉스 시스템이 가져야 하는 GNU 화면을 사용할 수 있습니다.

만약 당신이 우분투/데비안에 있다면, 그것의 향상된 변종 바이부도 꽤 좋습니다.

여기에 설명된 대로 python 스크립트를 적절한 python 데몬으로 변환하는 것을 고려할 수 있습니다.

python-scripts는 python 스크립트를 영원히 실행하는 스크립트가 아닌 백그라운드 데몬 프로세스로 실행하는 데 사용할 수 있는 좋은 도구입니다.기존 코드를 조금 수정해야 하지만 단순하고 단순합니다.

만약 당신이 python-daemon과 관련된 문제에 직면한다면, 당신을 위해 동일한 것을 해줄 다른 유틸리티 감독자가 있지만, 이 경우 당신은 어떠한 코드도 작성할 필요가 없을 것입니다. 왜냐하면 이것은 프로세스를 데몬화하기 위한 즉시 사용 가능한 솔루션이기 때문입니다.

대답: 대체답변:tmux

  • 원격 시스템에 SSH 연결
  • 형자tmux 단로로
  • 부에서원프하시작다니합를로스세 안에서 원하는 합니다.tmuxpython3 main.py
  • tmux by 에의세션한Ctrl+b그리고나서d

이제 원격 컴퓨터를 종료해도 안전합니다.돌아올 때 사용하세요.tmux attach입장재에 다시 tmuxsession

여러 세션을 시작하려면 다음을 사용하여 각 세션의 이름을 지정합니다.Ctrl+b그리고나서$세션 이름을 입력합니다.

하려면 를 사용합니다.tmux list-sessions

중인 하려면 실행중세첨부합니다사용을을 사용합니다.tmux attach-session -t <session-name>.

위로는 안 되지만 화면이 더 좋아요.

장식기를 사용하는 파이썬 내부의 간단한 솔루션은 다음과 같습니다.

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.

사용해 보십시오.

nohup python -u <your file name>.py >> <your log file>.log &

화면에서 위의 명령을 실행하여 화면 밖으로 나올 수 있습니다.

이제 다음을 통해 파이썬 스크립트의 로그를 추적할 수 있습니다.tail -f <your log file>.log

스크립트를 종료하려면 ps -aux 및 kill 명령을 사용할 수 있습니다.

zsh 셸에는 모든 백그라운드 프로세스를 실행하지 않고 실행할 수 있는 옵션이 옵션이 있습니다.

~/.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를 사용하는 사람이 많지 않다는 것은 알지만, 제가 추천하는 정말 멋진 쉘입니다.

로그인 여부에 관계없이 프로세스가 영구적으로 실행되어야 하는 경우 프로세스를 데몬으로 실행하는 것을 고려하십시오.

supervisor는 모든 프로세스를 데몬화하는 데 사용할 수 있는 탁월한 즉시 사용 가능한 솔루션입니다.다른 제어 유틸리티가 있습니다.supervisorctl관리자가 실행 중인 프로세스를 모니터링하는 데 사용할 수 있습니다.

이 작업을 수행하기 위해 추가 코드를 작성하거나 기존 스크립트를 수정할 필요가 없습니다.또한 자세한 설명서를 사용하면 이 프로세스가 훨씬 간단해집니다.

python-daemon 주변에서 몇 시간 동안 머리를 긁적거린 후, 감독관은 몇 분 안에 저에게 효과가 있는 해결책입니다.

이것이 파이썬 데몬을 작동시키려고 하는 누군가에게 도움이 되기를 바랍니다.

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

언급URL : https://stackoverflow.com/questions/2975624/how-to-run-a-script-in-the-background-even-after-i-logout-ssh

반응형