[英]Read stdout of a redis-cli subscribe and run bash command on message
我想要一個 bash 腳本,它讀取redis-cli
訂閱的標准輸出並在收到消息時執行某些操作以及消息值。
訂閱可以像這樣作為參數傳遞給redis-cli
redis-cli --raw subscribe foo
但是然后我需要將該標准輸出通過管道傳輸到某些內容,以便我可以解析消息。 我想過使用while read line; do
while read line; do
循環,但單個 redis 消息占用 3 行。
更新
我的最終目標是通過在 etcd 上設置一個鍵來宣布一個新的 redis master。 這應該可以通過訂閱 redis 哨兵上的switch-master
通道來實現。 [1] 該消息的值應該類似於<master name> <oldip> <oldport> <newip> <newport>
並且我想將該newip
設置為newip
上的值。
我想在收到該消息時運行的命令是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
您必須禁用輸出緩沖並讀取整行:
stdbuf -oL redis-cli --raw SUBSCRIBE channel | while read RCMD; do
read CHANNEL
read MSG
[[ $RCMD == message ]] && echo "$QUEUE: $MSG"
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.