shellscript-13-一键部署redis
脚本内容
#!/bin/bash
# author: yolo
# 一键部署redis
# 检测执行正常
ch_ok()
{
if [ $? -ne 0 ]
then
echo "$1 error"
exit 1
fi
}
download_redis()
{
cd /usr/local/src/
if [ -f redis-6.2.12.tar.gz ]
then
echo "当前目录存在redis-6.2.12.tar.gz"
echo "检测MD5"
file_md5=`md5sum redis-6.2.12.tar.gz | awk '{print $1}'`
if [${file_md5} == '0ae0679c3b8779fa1b0b0f81e86be8a4' ]
then
reture 0
else
echo
/bin/mv redis-6.2.12.tar.gz redis-6.2.12.tar.gz.old
fi
fi
sudo wget -O redis-6.2.12.tar.gz https://codeload.github.com/redis/redis/tar.gz/refs/tags/6.2.12
ch_ok "下载redis完成"
}
install_redis()
{
cd /usr/local/src
sudo tar -zxvf redis-6.2.12.tar.gz
ch_ok "解压redis包"
cd redis-6.2.12/
echo "安装依赖"
if which yum >/dev/null 2>&1
then
# redhat
for pkg in cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl
do
if ! rpm -q $pkg >/dev/null 2>&1
then
sudo yum install -y $pkg
ch_ok "yum 安装$pkg"
else
echo "$pkg已经安装"
fi
done
fi
sudo make && sudo make PREFIX=/usr/local/redis install
ck_ok "编译安装redis"
sudo mkdir -p /usr/local/redis/{conf,log}
sudo mkdir -p /data/redis
if id redis &>/dev/null
then
echo “系统已经创建redis用户,跳过创建”
else
echo “创建redis用户”
sudo useradd -s /sbin/nologin redis
fi
ch_ok "创建redis用户"
sudo chown -R redis /data/redis /usr/local/redis/log
}
config_redis()
{
echo "配置redis.conf"
sudo /bin/cp /usr/local/src/redis-6.2.12/redis.conf /usr/local/redis/conf/redis.conf
sudo sed -i 's/daemonize no/daemonize yes/' /usr/local/redis/conf/redis.conf
sudo sed -i 's@logfile ""@logfile "/usr/local/redis/log/redis.log"@' /usr/local/redis/conf/redis.conf
sudo sed -i 's@dir ./@dir /data/redis@' /usr/local/redis/conf/redis.conf
sudo sed -i 's@pidfile /var/run/redis_6379.pid@pidfile /usr/local/redis/log/redis_6379.pid@' /usr/local/redis/conf/redis.conf
sudo sed -i 's@# requirepass foobared@requirepass yolo@123' /usr/local/redis/conf/redis.conf
echo "配置systemd service"
cat > /tmp/redis.service <<EOF
[Unit]
Description=redis
After=network.target
[Service]
User=redis
Type=forking
TimeoutSec=0
PIDFile=/usr/local/redis/log/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
sudo /bin/mv /tmp/redis.service /lib/systemd/system/redis.service
ch_ok "编辑redis.service完成"
echo "更新内核参数"
grep -q 'net.core.somaxconn = 2048' /etc/sysctl.conf || echo "net.core.somaxconn = 2048" | sudo tee -a /etc/sysctl.conf
grep -q 'vm.overcommit_memory = 1' /etc/sysctl.conf || echo "vm.overcommit_memory = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sudo systemctl daemon-reload
sudo systemctl enable redis
echo "启动redis"
sudo systemctl start redis
ch_ok "启动redis完成"
}
download_redis
install_redis
config_redis