Não é possível executar comandos remotos em lote após o comando pkill

0

Temos um cenário em que estou executando vários comandos remotos de uma só vez como os seguintes:

ssh user@remote-ip "
    ps -A | grep java
    rm -rf /usr/share/tomcat/webapps/ROOT
    ls
"

O conjunto de comandos acima é executado corretamente no servidor remoto. Mas quando estou adicionando um comando pkill entre os comandos depois que ele não executa:

ssh user@remote-ip "
    ps -A | grep java
    pkill -f tomcat
    rm -rf /usr/share/tomcat/webapps/ROOT
    ls
"

Portanto, no caso acima, os dois primeiros comandos, ou seja, ps -A | grep java e pkill -f tomcat são executados corretamente no servidor remoto e o restante dos dois comandos não.

Existe algum tratamento especial com o comando pkill ?

    
por Shashank Agrawal 09.07.2015 / 15:03

1 resposta

2

O script está interrompendo a execução porque a chamada pkill está falhando. Eu suspeito que neste caso o gato já tenha sido morto ou você tenha o nome do processo incorreto.

Pkill retorna os valores da seguinte forma, da página do manual :

   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.

Para forçar a linha pkill a sempre ter sucesso, mesmo que ela não tenha matado nada, adicione || true à linha pkill da seguinte forma:

ssh user@remote-ip "
    ps -A | grep java
    pkill -f tomcat || true
    rm -rf /usr/share/tomcat/webapps/ROOT
    ls
"

Note que este truque funcionará em muitos outros contextos, entretanto, cuidado, você está suprimindo uma mensagem de erro e com o script acima você não pode dizer se o pkill matou o tomcat, só que o tomcat não está rodando.

    
por 09.07.2015 / 15:14