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
"

したがって、上記の場合、最初の2つのコマンド、つまりおよびはps -A | grep javaリモートpkill -f tomcatサーバーで正しく実行されますが、残りの2つのコマンドはそうではありません。

コマンドに対する特別な処理はありますか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を殺したかどうかはわかりません。

おすすめ記事