簡體   English   中英

讀取 redis-cli 訂閱的標准輸出並在消息上運行 bash 命令

[英]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

[1] http://redis.io/topics/sentinel

因為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM