我想要一个bash脚本,它读取redis-cli
订阅的stdout,并在接收到消息时执行一些操作,沿着消息值。
subscribe可以作为参数传入redis-cli
,如下所示
redis-cli --raw subscribe foo
但是我需要将stdout连接到某个东西,这样我就可以解析消息了。我想过使用while read line; do
循环,但是一个redis消息要占用3行。
更新
我的最终目的是通过在etcd上设置一个键来宣布一个新的redis主人。这应该可以通过订阅redis哨兵上的switch-master
通道来实现。[1]该消息的值应该是<master name> <oldip> <oldport> <newip> <newport>
,我想在etcd上设置newip
作为一个值。
收到该消息时,我希望运行的命令是etcdctl set /redis/master $NEWIP
[1][http://redis.io/topics/sentinel](http://redis.io/topics/sentinel)
3条答案
按热度按时间7ivaypg91#
由于redis-cli订阅者输出当前正在缓冲(https://github.com/antirez/redis/issues/2074),因此这在当前是不可能。
p1tboqfb2#
你可以用一个巧妙的方法:
expect
,将其保存在可执行文件redis-listen.expect
中现在你可以听Redis:
t5zmwmid3#
您必须禁用输出缓冲并读取整行: