如何编写一个Bash脚本,根据Linux的Watch输出对Ceph集群做出反应

2024-05-13 19:51:09 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我面临的问题是:我有一个Ceph集群正在进行平衡,但偶尔我会从Ceph-s输出中收到一条慢速请求消息。我有两个终端通向ceph集群。使用以下命令将一个终端设置为活动监视慢速请求:

watch "ceph -s | grep -i 'slow'"

因此,我看到了两个结果。 其中一个输出如下所示:

Every 2.0s: ceph -s | grep -i 'slow'          Sun Jul 12 02:17:49 2020

            107 slow requests are blocked > 32 sec. Implicated osds 17
,27,37,51,58,81,118,122,124,137,153,160,181,197,205,217,236,259,267,28
3,309,318,323,328,343

此时,如果我看到慢请求弹出,我需要立即将集群设置为以下值:

rbarrett@osd001:~$ sudo ceph osd set norecover
norecover is set

之后,缓慢的请求将最终消失,您必须将集群设置为继续恢复

Every 2.0s: ceph -s | grep -i 'slow'          Sun Jul 12 02:20:07 2020

slow requests消失后,我必须取消设置norecover选项

rbarrett@osd001:~$ sudo ceph osd unset norecover
norecover is unset

所以我的问题是:如何在bash中编写一个脚本,作为一个进程或服务来运行,以便为我做到这一点

我的第一个想法是为watch命令使用一个变量,但是如何设置脚本以运行并监视集群呢

我不介意使用python,但更喜欢bash脚本

我想用这样的东西,但我不知道它是否会持续运行

#!/bin/bash
check=$(ceph -s | grep -i "slow requests")
echo $check
if [[ -n $check   ]];then
  echo "setting norecover flag"
  sudo ceph osd set norecover
else
  echo "no slow requests"
  sudo ceph osd unset norecover
fi

有人请确认这是否有效


Tags: echo脚本bashchecksudo集群requestsgrep
1条回答
网友
1楼 · 发布于 2024-05-13 19:51:09

您可以使用围绕脚本的循环无限地运行它

#!/bin/bash

while : ; do
    if sudo ceph -s | grep -i "slow requests"; then
        echo "setting norecover flag"
        sudo ceph osd set norecover
    else
        echo "no slow requests"
        sudo ceph osd unset norecover
    fi
    
    sleep 2
fi

我在检查之间添加了2秒钟的睡眠,以避免使用这个脚本时CPU占用率过高(否则可能会显著增加集群负载)。您可能需要根据您的需要进行调整(我建议不要低于2秒)

相关问题 更多 >