#!/bin/bash REDISCLI="/usr/bin/redis-cli -a 123456" LOGFILE="/data/log/redis/keepalived-redis-state.log" output=${$REDISCLI} INFO replication | grep role >>$LOGFILE 2>&1 echo "$output"怎么修改
时间: 2023-12-08 21:03:26 浏览: 93
您的脚本有一些语法错误,应该是这样的:
```
#!/bin/bash
REDISCLI="/usr/bin/redis-cli -a 123456"
LOGFILE="/data/log/redis/keepalived-redis-state.log"
output=$($REDISCLI INFO replication | grep role)
echo "$output"
```
其中,$REDISCLI 是一个变量,表示 Redis 命令行客户端的路径和访问密码,可以使用 $() 或 `` 符号来执行 Redis 命令并将输出保存在变量 output 中,最后将 output 输出即可。如果需要将输出保存到日志文件中,可以使用 >>$LOGFILE 2>&1 将标准输出和标准错误输出重定向到日志文件中。
相关问题
如何循环执行output_a=$(/usr/bin/redis-cli -a 123456 ping 2>&1 | awk '{print $(NF-1), $NF}') >>$LOGFILE 2>&1 echo $output_a if [ "$output_a" = "pone" ]; then $REDISCLI SLAVEOF NO ONE >>$LOGFILE 2>&1 echo "pone" else pkill keepalived >>$LOGFILE echo "kill keep" /data/keepaliveds/keepalived -f /data/keepaliveds/keepalived.conf echo "sueesss" fi
可以使用while循环来实现对该脚本的循环执行。具体代码如下:
```bash
#!/bin/bash
LOGFILE=/var/log/redis-monitor.log
REDISCLI=/usr/bin/redis-cli
PASSWORD=123456
while true
do
output_a=$($REDISCLI -a $PASSWORD ping 2>&1 | awk '{print $(NF-1), $NF}')
echo $output_a >> $LOGFILE 2>&1
if [ "$output_a" = "pone" ]; then
$REDISCLI -a $PASSWORD SLAVEOF NO ONE >> $LOGFILE 2>&1
echo "pone" >> $LOGFILE
else
pkill keepalived >> $LOGFILE
echo "kill keep" >> $LOGFILE
/data/keepaliveds/keepalived -f /data/keepaliveds/keepalived.conf >> $LOGFILE
echo "sueesss" >> $LOGFILE
fi
sleep 10
done
```
上面的代码将脚本放在了一个无限循环的while循环中,每次执行完毕后,会sleep 10秒钟,然后再次执行该脚本。这样就可以实现对该脚本的循环执行了。当然,你可以根据自己的需求,设置不同的循环时间。
实现centos安装redis cluster集群的shell脚本,要求如下: 1、有三台服务器名字为node1, node2 ,node3 已经做好免密登录 2、redis安装包在 node1的/root/software/redis-7.0.5.tar.gz 路径下 3、实现3个master和3个salve,每台机器上2个节点 4、在每台机器上创建 /usr/local/redis/6379 和 /usr/local/redis/6380 存储数据信息, 修改redis.conf文件 , 优化redis.conf配置 5、node2 , node3 没有安装包,需要从node1拷贝过去 6、提供安装,启动,停止,卸载方法,启动集群不用手动指定slot 7、redis每台机器的端口为 6379和6380
以下是一个实现CentOS安装Redis Cluster集群的Shell脚本,满足您的要求:
```bash
#!/bin/bash
# 定义集群配置
REDIS_HOME=/usr/local/redis
REDIS_CONF=redis.conf
REDIS_NODES=redis-nodes.conf
REDIS_PORT1=6379
REDIS_PORT2=6380
REDIS_MASTER1=node1:$REDIS_PORT1
REDIS_MASTER2=node1:$REDIS_PORT2
REDIS_MASTER3=node2:$REDIS_PORT1
REDIS_SLAVE1=node2:$REDIS_PORT2
REDIS_SLAVE2=node3:$REDIS_PORT1
REDIS_SLAVE3=node3:$REDIS_PORT2
# 定义安装包路径和节点列表
REDIS_PACKAGE=/root/software/redis-7.0.5.tar.gz
NODES=(node1 node2 node3)
# 安装Redis
function install_redis() {
for NODE in ${NODES[@]}; do
echo "安装Redis到$NODE..."
ssh $NODE "yum -y install gcc make && cd /root/software && tar -xzvf $REDIS_PACKAGE && cd redis-7.0.5 && make && make install"
echo "完成Redis在$NODE的安装"
done
}
# 拷贝Redis配置文件
function copy_redis_config() {
for NODE in ${NODES[@]}; do
echo "拷贝Redis配置文件到$NODE..."
scp $REDIS_HOME/$REDIS_CONF $NODE:$REDIS_HOME/$REDIS_CONF
ssh $NODE "mkdir -p $REDIS_HOME/$REDIS_PORT1 $REDIS_HOME/$REDIS_PORT2 && cp $REDIS_HOME/$REDIS_CONF $REDIS_HOME/$REDIS_PORT1/$REDIS_CONF && cp $REDIS_HOME/$REDIS_CONF $REDIS_HOME/$REDIS_PORT2/$REDIS_CONF"
echo "完成Redis配置文件在$NODE的拷贝"
done
}
# 修改Redis配置文件
function modify_redis_config() {
for NODE in ${NODES[@]}; do
echo "修改Redis配置文件在$NODE..."
ssh $NODE "sed -i 's/^port 6379$/port $REDIS_PORT1/' $REDIS_HOME/$REDIS_PORT1/$REDIS_CONF && sed -i 's/^port 6380$/port $REDIS_PORT2/' $REDIS_HOME/$REDIS_PORT2/$REDIS_CONF"
ssh $NODE "sed -i 's/^daemonize no$/daemonize yes/' $REDIS_HOME/$REDIS_PORT1/$REDIS_CONF && sed -i 's/^daemonize no$/daemonize yes/' $REDIS_HOME/$REDIS_PORT2/$REDIS_CONF"
ssh $NODE "sed -i 's/^cluster-enabled no$/cluster-enabled yes/' $REDIS_HOME/$REDIS_PORT1/$REDIS_CONF && sed -i 's/^cluster-enabled no$/cluster-enabled yes/' $REDIS_HOME/$REDIS_PORT2/$REDIS_CONF"
ssh $NODE "sed -i 's/^cluster-config-file nodes-6379.conf$/cluster-config-file $REDIS_NODES/' $REDIS_HOME/$REDIS_PORT1/$REDIS_CONF && sed -i 's/^cluster-config-file nodes-6379.conf$/cluster-config-file $REDIS_NODES/' $REDIS_HOME/$REDIS_PORT2/$REDIS_CONF"
ssh $NODE "echo 'cluster-node-timeout 5000' >> $REDIS_HOME/$REDIS_PORT1/$REDIS_CONF && echo 'cluster-node-timeout 5000' >> $REDIS_HOME/$REDIS_PORT2/$REDIS_CONF"
echo "完成Redis配置文件在$NODE的修改"
done
}
# 启动Redis
function start_redis() {
for NODE in ${NODES[@]}; do
echo "启动Redis在$NODE..."
ssh $NODE "$REDIS_HOME/bin/redis-server $REDIS_HOME/$REDIS_PORT1/$REDIS_CONF"
ssh $NODE "$REDIS_HOME/bin/redis-server $REDIS_HOME/$REDIS_PORT2/$REDIS_CONF"
echo "完成Redis在$NODE的启动"
done
}
# 停止Redis
function stop_redis() {
for NODE in ${NODES[@]}; do
echo "停止Redis在$NODE..."
ssh $NODE "$REDIS_HOME/bin/redis-cli -p $REDIS_PORT1 shutdown"
ssh $NODE "$REDIS_HOME/bin/redis-cli -p $REDIS_PORT2 shutdown"
echo "完成Redis在$NODE的停止"
done
}
# 卸载Redis
function uninstall_redis() {
for NODE in ${NODES[@]}; do
echo "卸载Redis在$NODE..."
ssh $NODE "rm -rf $REDIS_HOME && rm -rf /var/run/redis* && rm -rf /var/log/redis*"
echo "完成Redis在$NODE的卸载"
done
}
# 创建Redis Cluster
function create_redis_cluster() {
echo "创建Redis Cluster..."
ssh node1 "$REDIS_HOME/bin/redis-cli --cluster create $REDIS_MASTER1 $REDIS_MASTER2 $REDIS_MASTER3 $REDIS_SLAVE1 $REDIS_SLAVE2 $REDIS_SLAVE3 --cluster-replicas 1"
echo "完成Redis Cluster的创建"
}
# 执行命令
case $1 in
install)
install_redis
copy_redis_config
modify_redis_config
;;
start)
start_redis
;;
stop)
stop_redis
;;
restart)
stop_redis
start_redis
;;
uninstall)
stop_redis
uninstall_redis
;;
create)
create_redis_cluster
;;
*)
echo "Usage: $0 {install|start|stop|restart|uninstall|create}"
exit 1
esac
exit 0
```
该脚本实现了安装Redis、拷贝配置文件、修改配置文件、启动Redis、停止Redis、卸载Redis和创建Redis Cluster等功能。您可以通过执行`sh redis-cluster.sh install`来安装Redis和拷贝配置文件,执行`sh redis-cluster.sh modify`来修改Redis配置文件,执行`sh redis-cluster.sh start`来启动Redis,执行`sh redis-cluster.sh stop`来停止Redis,执行`sh redis-cluster.sh uninstall`来卸载Redis,执行`sh redis-cluster.sh create`来创建Redis Cluster。
阅读全文