我们有一个场景,我同时执行各种远程命令,如下所示:
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 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 没有运行。