Прочтите стандартный вывод подписки redis-cli и запустите команду bash для сообщения
Я хотел бы сценарий Bash, который читает стандартный вывод redis-cli
подписаться и что-то делает, когда сообщение получено, вместе со значением сообщения.
Подписка может быть передана как аргумент redis-cli
вот так
redis-cli --raw subscribe foo
но затем мне нужно передать этот стандартный вывод, чтобы я мог проанализировать сообщения. Я думал об использовании while read line; do
цикл, но одно сообщение redis занимает 3 строки.
Обновить
Моя цель - объявить нового мастера Redis, установив ключ на etcd. Это должно быть достижимо, подписавшись на switch-master
канал на редис часового. [1] Значение этого сообщения должно быть примерно таким <master name> <oldip> <oldport> <newip> <newport>
и я хотел бы установить это newip
в качестве значения на etcd.
Команда, которую я хотел бы выполнить, когда это сообщение получено, etcdctl set /redis/master $NEWIP
3 ответа
Вы можете использовать хитрый способ: expect
, сохраните это в исполняемом файле redis-listen.expect
#!/usr/bin/expect
spawn redis-cli psubscribe YOUR_CHANNEL_PATTERN*
expect
и теперь вы можете слушать Redis:
./redis-listen.expect | grep channel
Поскольку вывод подписки redis-cli в настоящее время буферизован ( https://github.com/antirez/redis/issues/2074), в настоящее время это невозможно.
Вам нужно отключить буферизацию вывода и читать целые строки:
stdbuf -oL redis-cli --raw SUBSCRIBE channel | while read RCMD; do
read CHANNEL
read MSG
[[ $RCMD == message ]] && echo "$QUEUE: $MSG"
done