pkill 명령 후에 일괄 원격 명령을 실행할 수 없습니다.

pkill 명령 후에 일괄 원격 명령을 실행할 수 없습니다.

아래와 같이 다양한 원격 명령을 동시에 실행하는 시나리오가 있습니다.

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이 실행되고 있지 않다는 점만 알 수 있습니다.

관련 정보