heredoc
원격 컴퓨터에서 여러 줄 명령을 실행하는 데 사용됩니다 . 원격 시스템에 있는 서버를 종료하려면 서버의 PID를 가져오십시오.
#!/bin/bash
HOST_IP="10.180.5.23"
read -p "For HOST RESTART press 1" num
if [ "$num" == "1" ]
then
ssh -t -t $HOST_IP << 'EOSSH'
line=$(pgrep -f host_server1)
echo $line
arr=($line)
sudo kill -9 "${arr[1]}"
EOSSH
fi
오류: kill: (15015) - 작업이 허용되지 않습니다.
답변1
만약 당신이 가지고 있다면 pgrep
당신도 그럴 가능성이 있습니다 pkill
.
pgrep
그러면 kill
이론적 경쟁 조건이 발생합니다 . 이를 사용하면 pkill
(스크립트에서) 경쟁 조건이 제거되고 PID를 보유하기 위해 변수를 사용하지 않아도 됩니다.
ssh -t -t "$HOST_IP" pkill -f host_server1
KILL
또는 신호를 보내려는 경우 :
ssh -t -t "$HOST_IP" pkill -KILL -f host_server1
-f
, pgrep
및 를 사용하면 pkill
프로세스 이름뿐만 아니라 전체 명령줄에 대한 패턴이 일치합니다.
-n
및 의 경우 -o
(각각) 최신 또는 가장 오래된 일치 프로세스가 영향을 받습니다. 따라서 KILL
최신 정보를 원 host_server1
하고 다른 정보는 원하지 않는 경우:
ssh -t -t "$HOST_IP" pkill -KILL -n -f host_server1