bash 스크립트를 시작한 sshd 연결에 연결하면 해당 스크립트를 종료하고 다른 명령을 실행할 수 있습니다.

bash 스크립트를 시작한 sshd 연결에 연결하면 해당 스크립트를 종료하고 다른 명령을 실행할 수 있습니다.

내 문제는 우리가 서버에 연결하고 스크립트를 실행한다는 것입니다. 그러면 sshd용 1개, bash용 1개, 총 2개의 PID가 생성됩니다. 때로는 스크립트에서 생성한 연결 일정이 여전히 존재하는 경우가 있습니다.

sshd 연결이 끊어지면 자동으로 신호를 포착하고 원하지 않는 항목을 제거하도록 원격 측에서 정리 작업을 수행하려고 합니다. 서버에서 종료 신호 등을 포착하고 있지만 SSH 삭제를 포착할 수 없는 것 같습니다.

SSHD 연결이 끊어지면 처리를 위해 연결이 필요하므로 계속 진행할 필요가 없습니다.

우리는 2개의 스크립트를 실행하려고 합니다. 하나는 서버에 연결하고 다른 하나는 작업을 수행합니다.

발사통

#!/bin/bash
#confirm arguments sent to server [args]
echo "You provided the arguments:" "$@"

#create ssh connection to remote server [args]
ssh -t "$1" 'trap : INT; bash -s' < monitor.sh "$2"


trap dockertermlocal EXIT
dockertermlocal() 
{ 
  echo "Caught termination signal from local!" 
  send clean up to remote server
  echo "stopped docker from local"
  exit 1 
}

#Confirmation
echo "ran to completion"

외딴

#Command passed to script
echo "You provided the arguments:" "$@"

# Run docker command
eval "$@"
echo "ran command"
coproc ssh "$1" 'command & read; kill $!'

답변1

다른 신호에 대해서는 잘 모르겠지만 로컬 시스템으로 돌아가는 트래픽이 있는 경우 거기에서 PIPE 신호를 캡처할 수 있습니다. 연결이 끊어지면 파이프가 닫히므로 스크립트는 쓰기를 시도할 때 PIPE 신호를 받게 됩니다. 통신이 많지 않은 경우 문자(예: 점)를 매초(또는 필요할 때마다) 시작 컴퓨터로 다시 보내는 백그라운드 작업을 설정할 수 있습니다. 그러면 다소 즉각적인 조치가 실행됩니다. .

관련 정보