无限循环等待变量值改变,并在mongo shell中每30秒检查一次
Infinite loop to wait for the variable value to change, and check every 30 seconds in mongo shell
正在编写一个 bash 脚本,我连接到 mongo-shell。我有 rs.status()
的以下输出。我必须等待其中一位成员将 stateStr
的值更改为 Secondary
。在下面的输出中,您可以看到,现在它显示 Not active
。我想编写一个无限循环,它将遍历所有成员,并每 30 秒检查一次 stateStr
,直到出现 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
,避免忙等
更新一:
如果你的 mongo 版本稍旧,那么你可能无法使用箭头函数,需要这样拼写:
while (rs.status().members.every(function(e) { return e.stateStr != "SECONDARY"; })) {
正在编写一个 bash 脚本,我连接到 mongo-shell。我有 rs.status()
的以下输出。我必须等待其中一位成员将 stateStr
的值更改为 Secondary
。在下面的输出中,您可以看到,现在它显示 Not active
。我想编写一个无限循环,它将遍历所有成员,并每 30 秒检查一次 stateStr
,直到出现 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
,避免忙等
更新一: 如果你的 mongo 版本稍旧,那么你可能无法使用箭头函数,需要这样拼写:
while (rs.status().members.every(function(e) { return e.stateStr != "SECONDARY"; })) {