我正在编写一个bash脚本来监视MongoDB的状态。一旦崩溃,则重新启动它。脚本如下:
def with_previous(iterable, *, fillvalue=None):
"""Yield each iterable item along with the item before it."""
previous = fillvalue
for item in iterable:
yield previous, item
previous = item
>>> list(with_previous([2, 1, 3], fillvalue=0))
[(0, 2), (2, 1), (1, 3)]
但是似乎不起作用。从系统返回:
while true
do
ret = $("mongod --config /etc/mongod.conf")
if $ret == 0
then
echo "I am out with code 0."
break
fi
echo "running again"
done
echo "I am out with code $?"
不确定是什么问题。任何帮助表示赞赏。
答案 0 :(得分:2)
您的代码中存在几个问题:
x, y = foo.size
x2, y2 = math.floor(x-20), math.floor(y-50)
将尝试将$("mongod --config /etc/mongod.conf")
作为命令运行,并包含空格mongod --config /etc/mongod.conf
语法错误您可以这样重写它:
if
有关while :; do
if mongod --config /etc/mongod.conf; then
echo "I am out with code 0."
break
fi
echo "running again"
# probably sleep for a few seconds here
done
echo "I am out with code $?"
语句的信息,请参见:
答案 1 :(得分:2)
您的循环可以变得更简单:
while ! mongod --config /etc/mongod.conf; do
echo "running again" >&2
sleep 1
done
if test -n "$VERBOSE"; then echo 'modgod successful'; fi
请注意,关键字if
执行命令。因此,if $ret == 0
尝试运行带有参数$ret
和==
的命令0
(假设该变量为非空且不包含空格)。几乎可以肯定这不是您想要的。写if test "$ret" = 0
或if [ "$ret" = 0 ]
更典型。如果$ret
为空,则它试图使用单个参数==
执行命令0
。