reboot -f
유닉스 머신을 강제로 재부팅하기 위해 명령을 원격으로 사용하고 있습니다. 문제는 ssh 연결이 오랫동안 활성 상태로 유지되는 이유는 무엇입니까? 컴퓨터를 재부팅 한 직후 ssh 연결을 닫고 로컬 셸로 돌아가고 싶습니다. 어떻게해야합니까? -f
플래그가없는 재부트 명령 은 작동하지 않습니다.
Enter
. 그런 다음 예 ~.
를 들어 세션을 종료합니다. Enter ~?
다른 사람들의 목록을 위해.
reboot -f
유닉스 머신을 강제로 재부팅하기 위해 명령을 원격으로 사용하고 있습니다. 문제는 ssh 연결이 오랫동안 활성 상태로 유지되는 이유는 무엇입니까? 컴퓨터를 재부팅 한 직후 ssh 연결을 닫고 로컬 셸로 돌아가고 싶습니다. 어떻게해야합니까? -f
플래그가없는 재부트 명령 은 작동하지 않습니다.
Enter
. 그런 다음 예 ~.
를 들어 세션을 종료합니다. Enter ~?
다른 사람들의 목록을 위해.
답변:
reboot -f
재부팅을 유발할 권한이 없으면 명령이 반환되지 않습니다. SSH 클라이언트가 발행되는 시점에서 SSH 클라이언트는 다음을 수행 할 수있는 작업을 기다리고 있습니다.
SSH 서버 프로세스가 종료되었으므로 타이머가 시작될 때까지 SSH 클라이언트가 종료되지 않습니다.
를 실행 ssh remotehost 'reboot -f >/dev/null &'
하면 다음과 같은 결과가 발생합니다.
reboot
백그라운드 에서 명령을 시작합니다 .reboot
명령은 머신을 재부팅합니다.그러나 이는 신뢰할 수 없습니다. 타이밍에 따라 3 단계는 2 단계 전에 발생할 수 있습니다. 타이머를 추가하면 가능성이 낮아집니다.
ssh remotehost '{ sleep 1; reboot -f; } >/dev/null &'
서버 쪽이 실행되도록 커밋 reboot
됨을 확실히 확인하려면 클라이언트에게 커밋되었음을 알리기 전에 실제로 재부팅하지 않는지 확인하려면 서버에서 클라이언트로 이동하려면 추가 알림이 필요합니다. 이것은 SSH 연결을 통해 출력 될 수 있지만 복잡해집니다.
(sleep 1 && sudo reboot &) && exit
. 괄호는 서브 프로세스를 생성하여 1 초간 기다린 다음 재부팅을 시작합니다. 그러나 호스트 프로세스는 즉시 ssh 세션을 종료합니다. 나는 쉘 전문가가 아니지만 이것은 지금까지 나를 위해 일했다.
일부 답변은 비슷했지만 정답은 다음과 같습니다.
ssh user@192.168.0.130 "nohup sudo reboot &>/dev/null & exit"
설명:
exit
마지막 명령의 상태가 0 (성공)이되도록 마지막 명령으로 사용 하려고합니다 . 원하는 경우 수면을 추가 할 수 있지만 필요하지는 않습니다stdin
와는 stdout
연결이 종료되지 않도록 여전히 SSH를 통해 가상 터미널로 연결되어 있습니다. SSH 세션을 종료하고 백그라운드에서 명령을 실행하려면 두 가지 추가 작업을 수행해야합니다.
stdout
와 stderr
에 /dev/null
그들이 SSH 세션을 보유하고있는 가상 터미널로 리디렉션되지 않도록. 이것이 &>/dev/null
부분입니다.stdin
읽을 수없는 파일로 동일한 방식 으로 리디렉션해야합니다 . 그것이 쉘 내장 기능 nohup
입니다.모든 방법으로 터미널에서 분리 된 백그라운드에서 실행중인 명령 만 사용하면 exit
세션이 닫히고 가상 터미널에 stdin
없거나 stdout
남아 있기 때문에 SSH는 오류없이 연결을 종료합니다.
다음 명령을 사용하여 ssh 세션을 종료하고 시스템을 재부팅하는 방법은 무엇입니까?
ssh login@host "reboot -f"
그런 다음 Ctrl + C를 눌러 ssh를 종료하십시오.