내가 사용한다면
timeout 10 ssh -n -o BatchMode=yes 1.1.1.1 'sleep 20' > 1.1.1.1.txt 2>&1 &
서버에서 원격 명령을 실행하기 위해 10초 후에 SSH 연결을 끊습니다. 그러면 sleep 20
서버는 여전히 실행 중이지만 SSH 연결이 없는 것을 볼 수 있습니다.
시간 초과(예: 10초) 후에 원격 명령을 종료하려면 어떻게 해야 합니까?
원격 시스템은 AIX 6.1(또는 SLES)이며 "시간 초과"에 사용할 수 있는 패키지가 없습니다. 내 클라이언트는 Ubuntu 10.03입니다.
답변1
원격 서버에 POSIX 호환 셸이 있다고 가정하면 다음이 작동합니다.
ssh ...options... 'command & pid=$!; sleep 20; kill $pid'
물론POSIX 표준설명하다 $!
:
현재 셸에서 실행된 가장 최근 백그라운드 명령(목록 참조)의 10진수 프로세스 ID로 확장됩니다. (예를 들어 서브셸에서 실행되는 백그라운드 명령은 현재 셸 환경의 "$!" 값에 영향을 주지 않습니다.) 파이프라인의 경우 프로세스 ID는 파이프라인에 있는 마지막 명령의 프로세스 ID입니다.
원격 시스템에 작업 제어 기능이 있는 경우 다음과 같이 단축할 수 있습니다.
ssh ...options... 'command & sleep 20; kill %1'
답변2
여전히 "timeout" 명령만 사용하여 이 작업을 수행하려면 원격 실행 명령(ssh)이 tty를 할당해야 하며 시간 초과로 인해 원격 호출도 종료됩니다. "-t"를 포함하도록 ssh 명령을 변경하십시오.