SSH를 통해 원격 프로세스 종료

SSH를 통해 원격 프로세스 종료

원격으로 종료하고 싶은 프로세스가 있습니다. 나는 노력했다

ssh remotehost "kill -9 $(ps -aux | grep foo | grep bar | awk '{print $2}')"

하지만 이것은 오류를 반환합니다.

kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

그러나 따옴표 안에 명령을 실행하면

kill -9 $(ps -aux | grep foo | grep bar | awk '{print $2}')

원격 호스트에서는 잘 작동합니다. 여기서 뭔가 빠졌나요?

답변1

로컬 쉘이 확장되더라도 명령 $(..)대체가 실패합니다.$앞으로이는 stdin명령 으로 전달됩니다 ssh. 이스케이프 처리하거나 here-string을 사용해야 합니다.

awk또한 인쇄된 명령 $2도 명령줄 인수로 보간됩니다. 따라서 명령이 원격으로 실행될 때까지 확장을 연기하기 위해 이스케이프 처리합니다.

탈출과 함께,

ssh remotehost "kill -9 \$(ps -aux | grep foo | grep bar | awk '{print \$2}')"

또는 여기 문서를 사용하세요.

ssh remotehost <<'EOF'
kill -9 $(ps -aux | grep foo | grep bar | awk '{print $2}')
EOF

또한 이것은 grep .. | grep .. | awk중복됩니다. 혼자서 모든 일을 할 수 있습니다 awk. 아니면 pkill이름으로 직접 프로세스를 종료하는 것이 더 좋습니다 .

답변2

이것은 호스트 그룹을 죽이는 데 효과적이었습니다.

for i in `cat hostlist`;do ssh -q $i kill `ssh -q $i ps -ef | grep <process name>|awk '{print $2}'`;done  

답변3

당신은 다음과 같은 일을 선택할 수 있습니다

ssh remotehost "killall -r 'foo.*bar'"

관련 정보