使用Environment变量在redis.conf中设置动态路径

时间:2013-10-18 14:50:24

标签: configuration redis environment-variables

我有一个环境变量MY_HOME,它有一个目录/home/abc

的路径

现在,我有一个redis.conf文件,我需要像这样设置这个路径

**redis.conf**

pidfile $MY_HOME/local/var/pids/redis.pid
logfile $MY_HOME/local/var/log/redis.log
dir $MY_HOME/local/var/lib/redis/

就像我们在命令行中一样,以便我的配置文件根据Environment变量选择路径。

3 个答案:

答案 0 :(得分:2)

因为Redis可以从stdin读取其配置,所以我做的事与@jolestar建议的非常类似。我将占位符变量放在redis.conf中,然后在我的Redis启动器中使用sed替换它们。例如:

==========
$MY_HOME/redis/redis.conf
==========
...
pidfile {DIR}/pids/server{n}.pid
port 123{n}
...

然后我有一个启动Redis的脚本:

==========
runredis.sh
==========
DIR=$MY_HOME/redis
for n in {1..4}; do
    echo "starting redis-server #$n ..."
    sed -e "s/{n}/$n/g" -e "s/{DIR}/$DIR/g" < $DIR/redis.conf | redis-server -
done

我一直在使用这种方法,效果很好。

答案 1 :(得分:0)

Redis不支持此功能,但是可以使用envsubst(几乎在所有现代发行版中默认安装)来实现-在运行$featuredmembers = get_field('featured_member'); global $post; //$featuredmembers has a field named "featured". That's the field I want. $posts = get_posts([ 'post_type' => 'members', 'post_status' => 'publish', 'posts_per_page' => -1, 'order' => 'ASC', 'orderby' => 'title' ]); foreach ($featuredmembers as $post) { print_r($post['featured']->ID); echo get_field('featured'); } 之前替换环境变量的值。

redis-server

答案 2 :(得分:-1)

我也找到了解决方案,但redis config不支持env var。 我认为有2种方法:

  1. 通过脚本启动redis,脚本获取env var并更改redis config。
  2. 通过命令行启动redis,并将env var作为参数发送。