【问题标题】:How to Write a Bash Script that Will React to Ceph Cluster based on Watch Output for Linux如何根据 Linux 的 Watch 输出编写一个对 Ceph 集群做出反应的 Bash 脚本
【发布时间】:2020-11-01 09:18:27
【问题描述】:

这就是我面临的问题:我有一个正在平衡的 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

请有人确认这是否可行?

【问题讨论】:

    标签: python bash shell automation ceph


    【解决方案1】:

    您可以在脚本周围使用循环来无限运行它。

    #!/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 秒的睡眠时间,以避免 this 脚本的 CPU 使用率过高(否则可能会显着增加集群负载)。您可能需要根据需要进行调整(我建议低于 2 秒)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2017-04-26
      • 1970-01-01
      相关资源
      最近更新 更多