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
"

因此,在上述情况下,前两个命令 ieps -A | grep javapkill -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 没有运行。

相关内容