运行 shell 来自 redis 服务器进程的命令

Run shell command from within redis server process

我运行在 RHEL 系统上安装 Redis 服务器,要求进程每 24 小时更新一次 AFS 身份验证令牌。

在将数据发布到数据库的客户端代码中,我可以通过每 N POST 个请求调用 shell 命令来更新 AFS 令牌(例如 echo PASSWORD | kinit && aklog.

我想在服务器进程中实现类似的功能,但不确定如何实现。是否有任何 "post-receive-data" 回调样式挂钩可用于从 Redis 服务器进程中 运行 shell 命令?如果其他人可以就此问题提供任何建议,我将不胜感激。

否 - Redis 服务器不是为此设计的,也不打算用于此目的。如果你真的坚持使用来自 Redis 服务器的事件来触发 shell 命令,你可以通过以下方式破解:

  • 跟踪服务器的日志文件并查找由客户端调用 EVAL 并使用调用 redis.log Lua 函数的脚本生成的事件。
  • 运行 一个带有基本本地 Redis 客户端(例如 redis-cli)的循环,BRPOP 来自队列,完成工作并重复
  • 编写一些代码作为一种守护进程,使用 Redis 的 PubSub 通过通道接收消息以触发 shell 命令
  • 等等...

注意:WRT 至 "Redis server isn't designed for that" - 如果您确实发现了一些允许您执行所需操作的漏洞,请将其报告为严重的安全问题。从这个意义上说,您可能想阅读 http://antirez.com/news/96