我有一个环境变量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/
就像我们在命令行中所做的那样,以便我的配置文件根据环境变量选择路径。
我有一个环境变量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/
就像我们在命令行中所做的那样,以便我的配置文件根据环境变量选择路径。
因为 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
我一直在使用这种方法,而且效果很好。
我也找到了解决方案,但是 redis config 不支持 env var。我认为有两种方法:
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