ssh에서 장기 실행 명령 수행


10

ssh서버에 보내고 나는 약 할게요 파이썬 스크립트를 시작 해요. 완료하는 데 24 시간이 걸립니다. 인터넷 연결이 중간에 죽으면 어떻게합니까? 명령이 멈출까요?

로컬 연결 끊기가 명령에 영향을 미치지 않는 방식으로 장기 실행 명령을 실행할 수있는 방법이 ssh있습니까? 다시 로그인 한 후 출력을 계속 볼 수 있습니까?

답변:


29

가장 좋은 방법은 screen(서버에서) 명령을 실행하기 위해 세션을 시작한 다음 화면 연결을 끊어 계속 실행되도록하고 다른 작업을 수행하거나 서버와의 연결을 끊는 것입니다. 다른 옵션은 사용하는 것입니다 nohup와 함께 &당신이 할 수 있도록nohup <command> &


화면. 또는 무언가를 한 번 이상 실행하면 cron 작업을 설정할 수 있습니다.
xeon

2
화면에서 실행되는 동안 연결이 끊어 screen -r지면 다시 연결됩니다.
dpflug

2

또는 disown프로세스없이 이미 프로세스를 시작한 경우 에도 사용할 수 있습니다screennohup


2

기존 답변은 잘 작동 할 수 있지만 BusyBox (홈 라우터와 같은 최소 하드웨어 용 셸 및 도구 세트)가 필요했습니다. 내 시스템이없는 screen, dtach, at, disown, 또는 nohup! SO ( link )의 tbc0 덕분 에이 보석을 찾았습니다. 즉시 리턴되지만 서버 프로세스는 계속 실행됩니다.

ssh myserver 'sleep 100 >&- 2>&- <&- &'

또는 여러 명령이 필요한 경우 :

ssh myserver '(echo one; sleep 100; echo two; sleep 200) >&- 2>&- <&- &'

설명:

  • >&- -stdout 핸들을 닫습니다
  • 2>&- -stderr를 닫습니다
  • <&- -가까운 stdin
  • & -배경에 프로세스를 넣다

이것은 외부 프로그램을 사용하지 않으며 ksh, ash, Bourne shell, bash 등에서 작동해야합니다.


1

프로세스를 백그라운드로 설정하고 세션을 닫으면 프로세스는 init (PID 1)에 의해 채택됩니다.

세션이 있고 할 경우 :

]$ sleep 10000 &
]$ exit

다른 세션을 열고 다음을 실행하십시오.

]$ ps -ef | grep sleep
501      26387     1  0 16:37 ?        00:00:00 sleep 10000
root     26422 21360  0 16:40 pts/0    00:00:00 grep sleep

내 프로세스가 여전히 실행 중이며 상위 프로세스가 1 (초기화)임을 알 수 있습니다.

또는 데몬처럼 스크립트를 설정할 수 있습니다. 빠른 검색은이 유용한 링크 인 http://onlamp.com/python/pythoncook2/solution.csp?day=1을 표시 합니다. 그 접근 방식을 원한다면.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.