我想要一个bash脚本,它读取redis-cli
订阅的标准输出,并在收到消息时执行某些操作以及消息值。
订阅可以作为arg传递给redis-cli
,就像这样
redis-cli --raw subscribe foo
但后来我需要将stdout传递给某些东西,以便我可以解析这些消息。我想过使用while read line; do
循环,但单个redis消息占用3行。
更新
我的最后阶段是通过在etcd上设置一个键来宣布一个新的redis主机。这应该可以通过在redis sentinel上订阅switch-master
频道来实现。 [1]该消息的值应该是<master name> <oldip> <oldport> <newip> <newport>
的行,我想将newip
设置为etcd上的值。
收到该消息时我想要运行的命令是etcdctl set /redis/master $NEWIP
因为redis-cli订阅输出目前是缓冲的(https://github.com/antirez/redis/issues/2074),目前这是不可能的。
你可以使用一个棘手的方法:expect
,将其保存在可执行文件redis-listen.expect
中
#!/usr/bin/expect
spawn redis-cli psubscribe YOUR_CHANNEL_PATTERN*
expect
现在你可以听redis了:
./redis-listen.expect | grep channel