1

我的操作系统是 CentOS 6.3。我有一个 bash 脚本,它获取 mysql 从属状态并为用户菜单提供一些操作。执行操作时,它会自行刷新。这是一个简化的示例:

#!/bin/sh
server_status_detect () { 
  rm -f /root/slave.status
  mysql -u${MYSQL_USER} -p${MYSQL_PASS} -e 'show slave status \G' 2>&1 1>/root/slave.status
  #some parsing of the file to see if threads are running and so on, done like this
  Slave_IO_Running=$(grep '\sSlave_IO_Running:' /root/slave.status | awk '{ print $2 }');
}
themenu () {
  clear
  server_status_detect
  echo -e "Slave running? "$Slave_IO_Running;
  echo "Available actions:"
  #print actions
}

while true
 do
   themenu
   read answer
  case $answer in
        e)  menu_network_pick;;
        d)  menu_mount_pick;;
        m)  menu_master_pick;;
        p)  menu_repair_replication_pick;;
        t)  menu_restart_replication_pick;;
        r)  menu_reboot_pick;;
        s)  menu_shutdown_pick;;
        *) continue;;
   esac
done

一切都按预期工作,每次迭代都会重新创建状态文件,它包含实际数据。但是,脚本显示拳头解析数据!似乎它不会每次迭代都解析文件,它只是第一次解析,之后只显示它记住的结果。怎么会这样?

4

2 回答 2

1

我试图通过使用您的脚本来复制该问题,但我没有遇到您面临的问题。

你可以尝试更换

mysql -u${MYSQL_USER} -p${MYSQL_PASS} -e 'show slave status \G' 2>&1 1>/root/slave.status
Slave_IO_Running=$(grep '\sSlave_IO_Running:' /root/slave.status | awk '{ print $2 }');

date > /root/slave.status 
Slave_IO_Running=$(grep 'Dec' /root/slave.status | awk '{ print $4 }');

看看脚本是否显示刷新时间

于 2012-12-11T17:24:05.363 回答
0

真丢人!我犯了一个愚蠢的错误!

就在 grepping 之前,我有一个ifwhich 在第二次和并发迭代中变为 false,因此 greps 甚至没有执行,因此变量保持不变。问题已关闭,bash 并不疯狂,一切都是关于人的 :)

于 2012-12-11T18:23:50.663 回答