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
단로로 - 부에서원프하시작다니합를로스세 안에서 원하는 합니다.
tmux
예python3 main.py
- 을
tmux
by 에의세션한Ctrl+b
그리고나서d
이제 원격 컴퓨터를 종료해도 안전합니다.돌아올 때 사용하세요.tmux attach
입장재에 다시 tmux
session
여러 세션을 시작하려면 다음을 사용하여 각 세션의 이름을 지정합니다.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
'programing' 카테고리의 다른 글
파워셸 언로드 모듈...완전히. (0) | 2023.07.25 |
---|---|
C 함수 호출의 기본 인수 승격 (0) | 2023.07.25 |
UITableView에서 횡단 머리글의 기본 높이 (0) | 2023.07.20 |
c#에서 매개 변수화된 쿼리를 실행하는 동안 ORA-01745 오류가 발생했습니다. (0) | 2023.07.20 |
열 업데이트 시 Oracle SQL 트리거 (0) | 2023.07.20 |