【发布时间】:2015-03-03 14:49:53
【问题描述】:
我想要从这个脚本中 ssh 到主机,并检查进程是否处于活动状态,如果不是,我希望 littel 脚本死掉。 虽然不会死。它停止,然后在 ssh 再次成功时再次启动。 虽然我想要死亡。
#!/bin/bash
iterate=0
while [ $iterate -le 20000 ]
do
rc=$?
ssh -q -T coolhost "ps -ef | egrep '[i]cool-process' | grep wrapper "
if [[ $rc -eq 0 ]] ; then
sleep 2
iterate=$((iterate+1 ))
else
break
exit 1
fi
done
它将迭代到 2000,但是如果远程进程中断,它不会死。它不会中断并退出。
这会起作用-但不会休眠-如果我休眠,则 rc 会变为 0 并且永远不会消失。 所以这可行,但太基本了。
#!/bin/bash
set -e
while : ; do
ssh -q -T coolhost "ps -ef | egrep '[i]cool-process' | grep wrapper" > /dev/null 2>&1
done
【问题讨论】:
-
使用
pgrep代替ps -ef | grep ...。这是一种按名称搜索进程的更直接的方法(注意有用的选项,例如您可能想要或需要的-u和-f)。如果找不到进程,它将返回失败代码。 -
rc=$?应该在ssh之后的行...
标签: bash while-loop exit break