6

我有一个环境变量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/

就像我们在命令行中所做的那样,以便我的配置文件根据环境变量选择路径。

4

3 回答 3

2

因为 Redis 可以从中读取其配置stdin,所以我做了一些与@jolestar 建议的非常相似的事情。我将占位符变量放入我的 Redis 启动器中redis.conf,然后使用它们替换它们。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

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

于 2016-04-01T20:23:25.887 回答
0

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

  1. 通过脚本启动 redis,脚本获取 env var 并更改 redis 配置。
  2. 通过命令行启动redis,并将env var作为参数发送。
于 2014-09-09T14:00:25.497 回答
0

Redis 不支持这一点,但是可以通过使用envsubst(几乎所有现代发行版上默认安装)来实现 - 在运行之前替换环境变量的值redis-server

envsubst '$HOME:$MY_HOME' < ~/.tmpl_redis.conf >  ~/.redis.conf && redis-server ~/.redis.conf
# or
envsubst '$MY_HOME' < ~/.tmpl_redis.conf >  ~/.redis.conf && redis-server !#:5 # 5th argument from the previous command

于 2019-03-24T22:55:22.503 回答