以下に示すように、さまざまなリモートコマンドを同時に実行するシナリオがあります。
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を殺したかどうかはわかりません。