在我连接到mongo-shell的地方编写bash脚本。我有以下输出rs.status()
。我必须等待其中一个成员将的值更改stateStr
为Secondary
。在下面的输出中,您现在可以看到它显示为Not active
。我想编写一个无限循环,该循环将遍历所有成员,并stateStr
每隔30秒检查一次,直到出现Secondary
。
"members" : [
{ "stateStr" : "Not active" },
{ "stateStr" : "PRIMARY" },
{ "stateStr" : "ARBITER" }
],
这是我到目前为止的内容:
mongo --host ${other_host} ${ssl_mode} <<EOF
while (true){
for (i = 0; i <= 2; i++){
if (rs.status().members[i].stateStr == "SECONDARY") {
break;
}
}
}
rs.status();
EOF
但是,这并没有打破无限循环。我想每30秒检查一次。我怎么做?
mongo --host ${other_host} ${ssl_mode} << EOF
while (rs.status().members.every(e => e.stateStr != "SECONDARY")) {
sleep(1000);
}
rs.status();
EOF
请注意,我还添加了sleep
,以避免繁忙的等待。
更新1:如果您的mongo版本稍旧,则您可能无法使用箭头功能,需要将其拼写如下:
while (rs.status().members.every(function(e) { return e.stateStr != "SECONDARY"; })) {
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句