![pkill 명령 후에 일괄 원격 명령을 실행할 수 없습니다.](https://linux55.com/image/68628/pkill%20%EB%AA%85%EB%A0%B9%20%ED%9B%84%EC%97%90%20%EC%9D%BC%EA%B4%84%20%EC%9B%90%EA%B2%A9%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
아래와 같이 다양한 원격 명령을 동시에 실행하는 시나리오가 있습니다.
ssh user@remote-ip "
ps -A | grep java
rm -rf /usr/share/tomcat/webapps/ROOT
ls
"
위의 명령 세트는 원격 서버에서 제대로 실행됩니다. 하지만 중간에 명령을 추가하면 pkill
그 뒤의 명령이 실행되지 않습니다.
ssh user@remote-ip "
ps -A | grep java
pkill -f tomcat
rm -rf /usr/share/tomcat/webapps/ROOT
ls
"
따라서 위의 경우 처음 두 명령, 즉 ps -A | grep java
및 는 pkill -f tomcat
원격 서버에서 올바르게 실행되지만 나머지 두 명령은 그렇지 않습니다.
명령에 대한 특별한 처리가 있습니까 pkill
?
답변1
pkill 호출이 실패하여 스크립트 실행이 중지됩니다. 이 경우 Tomcat이 종료되었거나 프로세스 이름이 잘못된 것 같습니다.
Pkill 반환 값은 다음과 같습니다.매뉴얼 페이지:
0 One or more processes matched the criteria.
1 No processes matched.
2 Syntax error in the command line.
3 Fatal error: out of memory etc.
아무것도 종료하지 않더라도 pkill 행이 항상 성공하도록 하려면 || true
다음과 같이 pkill 행에 추가하십시오.
ssh user@remote-ip "
ps -A | grep java
pkill -f tomcat || true
rm -rf /usr/share/tomcat/webapps/ROOT
ls
"
이 트릭은 다른 많은 상황에서도 작동하지만 오류 메시지를 억제하고 있으며 위의 스크립트를 사용하면 pkill이 tomcat을 죽였는지 알 수 없으며 tomcat이 실행되고 있지 않다는 점만 알 수 있습니다.