rocky9 编写一键安装mysql 的sh脚本

基本操作步骤

1、虚拟机最小化安装rocky9系统,安装后克隆一个系统;1个用来获取下载的rpm包,一个用来编写sh 测试脚本;

2、修改虚拟机的 yum配置文件,获取获取rpm程序 :启用缓存,并修改yum下载软件的路径;

3、参考教程安装,安装mysql;

Centos(rocky) yum 安装mysql,切换路径、优化配置并设置开机自启_服务器开机自启mysql-CSDN博客文章浏览阅读2.5k次。1、安装方式介绍mysql安装共3中方式1)yum安装,最简单的方式2)rpm包安装,切记下载相应系统的 稳定版 源码包,相对较简单3)压缩包安装:自由度高,但配置相应复杂,且需要自己注册自启服务注:1,2,3无法在一台机器上共存,1,2可以通过mulit-mysql启动多个服务看,但无法实现:单机上的myql主从只有3方式支持1台安装多个mysql服务,实现mysql主从一、安装步骤1.获取最新的yum rmp包地址下载地址:MySQL :: MySQL Commu_服务器开机自启mysqlhttps://blog.csdn.net/qq_26408545/article/details/124114793?spm=1001.2014.3001.5502

4、将安装后缓存的rpm包下载下来,并打tar.gz包,并传至指定路径;

5、编写自动化安装mysql sh脚本;

6、测试运行一键安装命令

附录

        1)rpm及编写的脚本(本教程的centos7、rocky9.3)

        2)centos7 自动化 mysql、redis、nginx、jdk、rabbitMq、syslog程序的soft.sh脚本

你可能用到的编写sh 脚本的参考:

        1)下教程包含:1)中文字体,2)jdk  3)java依赖及时间同步器 ;4)nginx ; 5)redis

springboot vue 部署至Rocky(Centos)并能断电自启动,本文部署是若依应用-CSDN博客文章浏览阅读400次。安装中文字体(防止中文乱码)3、安装chrony(保证分布式部署时间的一致性)5、安装mysql数据,迁移目录,并授权自启动;6、安装redis,并设置自动动;7、安装nginx,并设置自启动;8、部署jar包,并设置自启动;参考教程Rocky(Centos)挂在磁盘_小云小白的博客-CSDN博客6、编辑 /etc/fstab 文件,最后添加单行。7、重启,并查看挂在磁盘是否仍在。发现/dev/vdb未挂载。2、对此系统可用磁盘。4、新建data路径。https://blog.csdn.net/qq_26408545/article/details/132690191        2)这边centos7 安装rabbitMq参考

centos7.6安装rabbitMq3.11.10和erlang25_centos rabbitmq 3.11 安装-CSDN博客文章浏览阅读1.7k次,点赞3次,收藏6次。解压后,上传到目录/usr/lib/rabbitmq/lib/rabbitmq_server-3.11.10/plugins。此时根据信息,打开/usr/lib/rabbitmq/bin/rabbitmq-server:(根据个人实际情况)应是rabbitqmq找不到erlang的安装环境,导致启动失败。用默认的账号密码【guest/guest】登录出现权限问题。当前目录:/usr/local/software。在最后加上下面两句话,路径根据自己配置的写。访问:http://ip:15672/_centos rabbitmq 3.11 安装https://blog.csdn.net/weixin_44142888/article/details/129549426        3)安装 syslog 参考

centos搭建简单自用syslog服务器_centos syslog-CSDN博客文章浏览阅读3.7k次,点赞5次,收藏22次。centos搭建简单自用syslog服务器_centos sysloghttps://blog.csdn.net/weixin_44270742/article/details/130101096

1、虚拟机最小化安装rocky9系统

参考:vmware安装 Rocky9(自定义分区安装),并开启服务器监控-CSDN博客文章浏览阅读1.1k次,点赞3次,收藏4次。目前市面上cpu现成:基本是4~32不等;这里配置6个占一半;例如:磁盘总大小360G :1、先添加/boot:2Gib;2、再添加swap(2Gib可以4Gib交换区,超过这个一律一样大,前面没有反斜杠)3、再添加/data挂在盘300Gib;4、在添加系统跟路径:/;大小不设置会占用所有剩余空间;然后点击上面的完成按钮;磁盘分区知识:/boot 系统引导区域;swap内存交换区-跟你的内存一样大最好。_rocky9https://blog.csdn.net/qq_26408545/article/details/133963090

1)最小化安装

2)存盘一定是标准分区(设备类型均为:标准分区。如下图);不要自动化磁盘:就4个用途路径

3)安装后克隆1台虚拟机(标准分区的可直接克隆)

2、修改yum 文件,开启缓存配置(其中一台1台)

修改 /etc/yum.conf 文件,添加

#是否缓存
keepcache=1
#缓存路径
cachedir=/root/cache/yum

3、参考教程安装,安装mysql;

教程如下

rocky(Centos) yum 安装mysql,切换路径、优化配置,不关SELINUX 并设置开机自启_服务器开机自启mysql-CSDN博客文章浏览阅读2.5k次。1、安装方式介绍mysql安装共3中方式1)yum安装,最简单的方式2)rpm包安装,切记下载相应系统的 稳定版 源码包,相对较简单3)压缩包安装:自由度高,但配置相应复杂,且需要自己注册自启服务注:1,2,3无法在一台机器上共存,1,2可以通过mulit-mysql启动多个服务看,但无法实现:单机上的myql主从只有3方式支持1台安装多个mysql服务,实现mysql主从一、安装步骤1.获取最新的yum rmp包地址下载地址:MySQL :: MySQL Commu_服务器开机自启mysqlhttps://blog.csdn.net/qq_26408545/article/details/124114793查找yum 下载的程序rpm包;

4、将安装后缓存的rpm包下载下来,并打tar.gz包,并传至指定路径;

1)将缓存文件,按如图方式放置在文件夹下;

这里我是安装后,查了一下mysql 版本8.0.36:

其中:1)base放的是mysql的安装包,2)depend-rpm:防止的是其他依赖包,3)config:是mysql的配置文件(未优化过的);

不参与sh脚本的:1)base-yum不参与sh脚本,是从mysql 拿到的 yum的rpm包;2)readMe.txt:内部使用的简单说明

2)将其打成tar.gz 用于 脚本安装的依赖程序包

用的软件压缩的tar.gz :1)先压缩 tar;2)再把tar 压过 gzip,得到 tar.gz 文件

Windows如何将文件压缩成.tar.gz的格式_windows压缩tar.gz文件-CSDN博客文章浏览阅读1.9w次,点赞13次,收藏38次。我们平时使用Linux和Windows系统相互传文件的时候,使用rar或者zip的压缩文件往往不是很方便,tar.gz是Linux和Unix下面比较常用的格式,那么如何再Windows下将文件压缩成tar.gz的格式呢?这时候,我们会得到一个tar文件,容易发现,tar文件的大小并未发生明显变化,这是因为tar实际上只是对文件进行简单的打包。5.接下来我们将刚才得到的tar文件“添加到压缩包”,如下图所示,选择压缩格式下选择“gzip”格式,即可得到tar.gz的压缩文件啦。..._windows压缩tar.gz文件https://blog.csdn.net/YSL_Lsy_/article/details/1259961523)将其上传至 /opt/soft,新建文件夹和切换路径如下:

mkdir -p /opt/soft
cd /opt/soft

将文件上传路径,如图

5、编写自动化安装mysql sh脚本; 

如上图,上传指定路径

soft.sh 脚本内容

#!/bin/bash
# 项目部署基础路径
BASE_PATH="/usr/local"# 压缩包名
TAR_GZ_NAME="centos9.3-rpm.tar.gz"# 压缩包和脚本的发布路径
PUSH_SH_PATH="/opt/soft"# 解压路径
UNZIP_TEMP_PATH="/usr/local/soft_unzip"# 1.1 使用的账号
MYSQL_USER="root"
# 1.2 数据库密码
MYSQL_PWD="123456"
# 1.3 自动创建数据库名称
MYSQL_CREATE_DB_NAME="test_db"# 2 开放防火墙端口
open_ports=("3306")
#-------------------往下为不建议调整参数--------------------
#参数1:操作类型
operate="$1"
#可选参数2 指定安装的软件
soft="$2"# 发布压缩包 解压后路径(会在解压后确定)
PUSH_TEMP_PATH=""# 检测的java_home位置的变量
JAVA_HOME=""# 中文字体路径
FONT_PATH="/usr/share/fonts/chinese"# 系统服务所在路径
SYS_SERVICE_PATH="/etc/systemd/system"# 空数组:存储汇总日志
log_array=()
# 临时日志变量
LOG_TEMP_LOG=""#使用说明,用来提示输入参数
usage() {echo "脚本可选通用命令:"echo " ● 安装 1) sh soft.sh push 参数2:可选项[mysql],无第二个参数,安装所有-需确认,all:安装所有-无需确认;"echo " ● 卸载 2)sh soft.sh remove 参数2:可选项[mysql],无第二个参数:卸载所有;"echo " ● 日志 3)sh soft.sh log 参数2:可选项[mysql],无第二个参数:查看所有;"echo " ● -- 参数 2 概述:"echo " ●      1、mysql:mysql-8.0.36"exit 1
}#建立相关文件夹并注册自启动服务
push(){#解压tar包un_tar_gz# 如果未指定安装软件if [ -z "${soft}" ]; then# 1、安装 mysqlwhile true; do# 1 提示用户输入(y or n)read -p "3、do you want to install mysql-8.0.36 ?(y or n) " option# 2、检查用户输入的选项值if [ "$option" = "y" ]; thenmysql_installbreakelif [ "$option" = "n" ]; thenLOG_TEMP_LOG=" ● ignore install:3、mysql-8.0.36 "log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"breakelseecho "no effect value,please enter(y or n)"fidoneelsecase "$soft" in"mysql")mysql_install;;"all")# 1、安装 mysqlmysql_install;;esacfi#删除解压的文件rm -rf $UNZIP_TEMP_PATH# 开放防火墙firewall_port_open# 调优系统配置sys_com_tuning# 8、打印汇总日志if [ -z "${soft}" ] ||[ "${soft}" = "all" ]; then# 打印汇总日志pirnt_sum_logfiecho " ● end: end of install exe;"
}# 卸载服务结束
remove(){# 关闭防火墙(应用不在时,有警告,需在最前面)firewall_port_close# 1、安装 mysqlif [ -z "${soft}" ] || [ "${soft}" = "mysql" ]; thenmysql_removefi# 2、打印汇总日志if [ -z "${soft}" ]; then# 打印汇总日志pirnt_sum_logfiecho " ● end: 卸载命令执行结束;"
}#日志
log(){# 1、安装 mysqlif [ -z "${soft}" ] || [ "${soft}" = "mysql" ]; thenmysql_logfi# 2、 打印汇总日志if [ -z "${soft}" ]; thenpirnt_sum_logfi
}mysql_install(){# 1、安装mysql的依赖cd $PUSH_TEMP_PATH/mysql-8.0.36/depend-rpmyum -y localinstall *.rpm# 2.1 添加mysql用户组groupadd mysql#2.2 用户组添加用户useradd -g mysql mysql# 3 安装mysql的依赖cd $PUSH_TEMP_PATH/mysql-8.0.36/baseyum -y localinstall *.rpm# 4 执行初始化并指定密码/usr/sbin/mysqld --initialize --user=mysql --lower-case-table-names=1# 5 备份并修改配置rm -rf /etc/my.cnf.bakcp -rf /etc/my.cnf /etc/my.cnf.bak# 5.1 替换mysql 配置文件cat $PUSH_TEMP_PATH/mysql-8.0.36/conf/my.cnf > /etc/my.cnf# 启动MySQL服务  echo "正在启动MySQL服务..."  sudo systemctl start mysqld  # 等待MySQL服务启动完成   sleep 5# 获取默认密码DEFAULT_PASSWORD=$(sudo grep 'A temporary password' /var/log/mysqld.log | awk '{print $NF}')# 使用mysqladmin修改密码mysqladmin -u root -p"${DEFAULT_PASSWORD}" password "$MYSQL_PWD"# 重启MySQL服务sudo systemctl restart mysqld# 等待启动完成,导入数据(空库可以启动快)   sleep 5# 连接到MySQL数据库服务器并创建数据库 mysql -u"root" -p"$MYSQL_PWD" -e "CREATE DATABASE ${MYSQL_CREATE_DB_NAME}"# 开启远程访问mysql_open_remoteecho " ● end install: mysql-8.0.36;"# 显示 mysql 状态mysql_log
}mysql_remove(){# 1 如果未安装mysql,则退出mysqld_install_status=`systemctl list-unit-files | grep mysqld`if [ -z "${mysqld_install_status}" ]; thenreturnfi# 停止MySQL服务  systemctl stop mysqld  # 卸载MySQL软件包及其依赖项  yum remove -y mysql mysql-server mysql-libs mysql-client-plugins mysql-common# 删除MySQL数据目录和配置文件(请谨慎操作)  rm -rf /var/lib/mysql rm -rf /etc/my.cnfrm -rf /etc/my.cnf.bakrm -rf /var/log/mysqld.logmysql_logecho " ● end remove: mysql-8.0.36;"
}mysql_log(){# 1 检测 mysql 是否自启动MYSQL_STATUS=$(systemctl is-active mysqld)if [ "${operate}" != "remove"  ]; then# 2.1 如果操作类型不是卸载,且 mysql 状态为:活跃的,打印成功,否则打印失败if [ "${MYSQL_STATUS}" = "active" ]; thenLOG_TEMP_LOG=" ● success: start mysql-8.0.36"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error: start mysql-8.0.36"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fielse#3 如果操作类型是卸载,且识别 mysql 状态为不存在 或者失败if [ "${MYSQL_STATUS}" = "unknown" ] || [ "${MYSQL_STATUS}" = "failed" ]; thenLOG_TEMP_LOG=" ● success:remove mysql-8.0.36"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error:remove mysql-8.0.36"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fifi# 4 如果单独安装 mysql,或者查看指定查看 mysql 日志,则显示日志if [ "${soft}" = "mysql" ] && { [ "${operate}" = "log" ] || [ "${operate}" = "push"  ]; }; thentail -f -n 20 /var/log/mysqld.logfi
}mysql_imp_sql(){SQL_FILE="${PUSH_TEMP_PATH}/mysql-8.0.36/conf/initDb.sql"if [ -e "$SQL_FILE" ]; thenmysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" $MYSQL_CREATE_DB_NAME < "$SQL_FILE"log_array+=(" ● 执行 mysql 数据数据化。")echo " ● 执行 mysql 数据数据化。" elselog_array+=(" ● 发布包不含 mysql 数据库初始化脚本。")echo " ● 发布包不含 mysql 数据库初始化脚本。" fi
}# mysql 开放远程访问
# 防火墙还未开放(在防火墙内操作)
mysql_open_remote(){echo " ● 配置mysql 可以远程访问"# 开放远程访问mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" -e "CREATE USER '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PWD}'"mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" -e "GRANT ALL PRIVILEGES ON *.* TO '${MYSQL_USER}'@'%' WITH GRANT OPTION"mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" -e "FLUSH PRIVILEGES;"
}# mysql 关闭远程远程访问
# 防火墙还未开放(在防火墙内操作)
mysql_close_remote(){#关闭防火墙echo " ● 配置mysql 关闭远程访问;"# 开放远程访问mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" -e "REVOKE ALL PRIVILEGES ON *.* FROM '${MYSQL_USER}'@'%';"mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" -e "DROP USER '${MYSQL_USER}'@'%'"mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" -e "FLUSH PRIVILEGES;"
}#解压tar包
un_tar_gz(){#1 删除可能存在的解压不全的临时文件rm -rf $UNZIP_TEMP_PATH#2 创建加压的文件夹mkdir -p $UNZIP_TEMP_PATH#2 进行解压操作tar -zxvf $PUSH_SH_PATH/$TAR_GZ_NAME -C $UNZIP_TEMP_PATH #3 获取加压后的文件路径#UNZIP_DIR_NAME=$(echo "$UNZIP_TEMP_PATH"/* | awk '{print $1}' | xargs basename)UNZIP_DIR_NAME=$(tar -tzf "$PUSH_SH_PATH"/"$TAR_GZ_NAME" | head -1 | cut -d '/' -f 1)#4 获取到解压后的真实路径PUSH_TEMP_PATH=$UNZIP_TEMP_PATH/$UNZIP_DIR_NAME
}#打印中途记录的在log_array内的内容
pirnt_sum_log(){# 打印数组的每个元素echo "-----------------------summary-log-start------------------------------"for element in "${log_array[@]}"; doecho "$element"doneecho "-----------------------summary-log-end ------------------------------"
}#防火墙开放端口
firewall_port_open(){# 定义要检查的端口号PORT=88# 检查指定端口是否已经开放if sudo firewall-cmd --list-ports | grep -q "\<$PORT\/tcp\>"; thenLOG_TEMP_LOG=" ● 端口 $PORT 已经开放,跳过"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"return;fiecho "调整 firewall 防火墙:"firewall-cmd --zone=public --add-port=88/tcp --permanentfirewall-cmd --zone=public --add-port=3306/tcp --permanentfirewall-cmd --reload# 防火墙日志firewall_port_log
}#防火墙开放端口
firewall_port_open(){# 检查端口是否已经开放PORT=$open_ports[0]# 检查指定端口是否已经开放if sudo firewall-cmd --list-ports | grep -q "\<$PORT\/tcp\>"; thenLOG_TEMP_LOG=" ● 端口 $PORT 已经开放,跳过"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"return;fi#循环开放端口for open_port in "${open_ports[@]}"doecho "开放firewall 防火墙-端口:${open_port}"firewall-cmd --zone=public --add-port=${open_port}/tcp --permanentdonefirewall-cmd --reload# 防火墙日志firewall_port_log
}#防火墙关闭端口
firewall_port_close(){for open_port in "${open_ports[@]}"doecho "关闭firewall 防火墙-端口:${open_port}"firewall-cmd --zone=public --remove-port=${open_port}/tcp --permanentdonefirewall-cmd --reload# 防火墙日志firewall_port_log
}#防火墙日志
firewall_port_log(){open_ports=$(firewall-cmd --list-ports)LOG_TEMP_LOG=" ● firewall-cmd open port:${open_ports}"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"
}# 系统调优(RedHat系列linux)
sys_com_tuning(){# 搜索文件中是否包含指定文本if grep -q "# 全局的打开文件数" "/etc/systemd/system.conf"; thenLOG_TEMP_LOG=" ● 系统配置 已调优(适配 RedHat系列linux),跳过"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"returnfi# 1 调整systemctl管理的 servie 资源限制echo "# 全局的打开文件数" >> /etc/systemd/system.confecho "DefaultLimitNOFILE=1048576" >> /etc/systemd/system.confecho "# 全局打开进程数" >> /etc/systemd/system.confecho "DefaultLimitNPROC=65535" >> /etc/systemd/system.conf# 2 调整系统内核参数echo "# 全局:端口最大的监听队列的长度,可为:32768" >> /etc/sysctl.confecho "net.core.somaxconn=32768" >> /etc/sysctl.confecho "# 内存分配模式:1为不限制" >> /etc/sysctl.confecho "vm.overcommit_memory = 1" >> /etc/sysctl.confecho "# 单进程打开文件句柄数" >> /etc/sysctl.confecho "fs.nr_open = 2097152" >> /etc/sysctl.confecho "# 系统打开文件句柄数" >> /etc/sysctl.confecho "fs.file-max = 102400" >> /etc/sysctl.conf# 2.1 刷新内核参数,立即生效/sbin/sysctl -p# 3 调整用户组资源限制echo "# 用户会话的 打开文件句柄数" >> /etc/security/limits.confecho "* soft nofile 1048576" >> /etc/security/limits.confecho "* hard nofile 1048576" >> /etc/security/limits.confecho "# 用户会话的 打开进程数限制" >> /etc/security/limits.confecho "* soft nproc 65535" >> /etc/security/limits.confecho "* hard nproc 65535" >> /etc/security/limits.confLOG_TEMP_LOG=" ● 系统配置 调优完成(适配 RedHat系列linux)"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"
}#根据输入参数,选择执行对应方法,不输入则执行使用说明 
case "$1" in"push") push ;;"remove") remove ;;"log") log ;;*)
usage 
;; 
esac

6、测试运行一键安装命令

1)将文件上传至另一台机器上,进程测试,并纠正sh脚本;

#授予执行权限
chmod +x soft.sh
#测试安装
sh soft.sh push

2) 成功安装的效果图

 卸载脚本,重新测试

cd /opt/soft
sh soft.sh remove

新的脚本,比之centos7 多了默认开放远程访问数据,安装后可连接测试

附录:

1)测试用的rpm及相关文件:

链接:https://pan.baidu.com/s/1NSB8VqDjNgaj2tzOY9uT6w 
提取码:blib 

2)centos7 自动化 mysql、redis、nginx、jdk、rabbitMq、syslog程序的soft.sh 脚本

centos7 的yum 文件修改 如图

soft.sh 脚本:

注:centos7已经快停止维护了,仅做参考

#!/bin/bash
# 项目部署基础路径
BASE_PATH="/usr/local"# 压缩包名
TAR_GZ_NAME="centos7-rpm.tar.gz"# 压缩包和脚本的发布路径
PUSH_SH_PATH="/opt/push"# 解压路径
UNZIP_TEMP_PATH="/usr/local/soft_unzip"# 1.1 数据库密码
MYSQL_PWD="123456"
# 1.2 自动创建数据库名称
MYSQL_CREATE_DB_NAME="test_db"# 2 安装到的JavaPath路径
JAVA_HOME_PATH="/usr/local/jdk17-TencentKona"# 2 rabbitMq 账号和密码
RABBITMQ_USER="admin"
RABBITMQ_PWD="123456"
#-------------------往下为不建议调整参数--------------------
#参数1:操作类型
operate="$1"
#可选参数2 指定安装的软件
soft="$2"# 发布压缩包 解压后路径(会在解压后确定)
PUSH_TEMP_PATH=""# 检测的java_home位置的变量
JAVA_HOME=""# 中文字体路径
FONT_PATH="/usr/share/fonts/chinese"# 系统服务所在路径
SYS_SERVICE_PATH="/etc/systemd/system"# 空数组:存储汇总日志
log_array=()
# 临时日志变量
LOG_TEMP_LOG=""#使用说明,用来提示输入参数
usage() {echo "脚本可选通用命令:"echo " ● 安装 1) sh soft.sh push 参数2:可选项[font|jdk|mysql|nginx|redis|rabbitmq|syslog|all],无第二个参数,安装所有-需确认,all:安装所有-无需确认;"echo " ● 卸载 2)sh soft.sh remove 参数2:可选项[font|jdk|mysql|nginx|redis|rabbitmq|syslog],无第二个参数:卸载所有;"echo " ● 日志 3)sh soft.sh log 参数2:可选项[font|jdk|mysql|nginx|redis|rabbitmq|syslog],无第二个参数:查看所有;"echo " ● -- 参数 2 概述:"echo " ●      1、font:中文字体,2、jdk :java运行依赖,及jdk-17-TencentKona;"echo " ●      3、mysql:mysql-8.0.36,4、nginx:nginx-1.24.0,5、redis:redis-7.2.4"echo " ●      6、rabbitmq:rabbitmq-3.11.28,7、syslog:syslog-8.24.0"exit 1
}#建立相关文件夹并注册自启动服务
push(){#解压tar包un_tar_gz# 如果未指定安装软件if [ -z "${soft}" ]; then# 1、安装 中文字体while true; do# 1 提示用户输入(y or n)read -p "1、do you want to install chinese font?(y or n) " option# 2、检查用户输入的选项值if [ "$option" = "y" ]; thenfont_installbreakelif [ "$option" = "n" ]; thenLOG_TEMP_LOG=" ● ignore install:1、chinese font "log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"breakelseecho "no effect value,please enter(y or n)"fidone# 2、安装 jdkwhile true; do# 1 提示用户输入(y or n)read -p "2、do you want to install jdk17_TencentKona?(y or n) " option# 2、检查用户输入的选项值if [ "$option" = "y" ]; thenjdk17_TencentKona_installbreakelif [ "$option" = "n" ]; thenLOG_TEMP_LOG=" ● ignore install:2、jdk17_TencentKona "log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"breakelseecho "no effect value,please enter(y or n)"fidone# 3、安装 mysqlwhile true; do# 1 提示用户输入(y or n)read -p "3、do you want to install mysql-8.0.36 ?(y or n) " option# 2、检查用户输入的选项值if [ "$option" = "y" ]; thenmysql_installbreakelif [ "$option" = "n" ]; thenLOG_TEMP_LOG=" ● ignore install:3、mysql-8.0.36 "log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"breakelseecho "no effect value,please enter(y or n)"fidone# 4、安装 nginxwhile true; do# 1 提示用户输入(y or n)read -p "4、do you want to install nginx-1.24.0 ?(y or n) " option# 2、检查用户输入的选项值if [ "$option" = "y" ]; thennginx_installbreakelif [ "$option" = "n" ]; thenLOG_TEMP_LOG=" ● ignore install:4、nginx-1.24.0 "log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"breakelseecho "no effect value,please enter(y or n)"fidone# 5、安装 rediswhile true; do# 1 提示用户输入(y or n)read -p "5、do you want to install redis-7.2.4 ?(y or n) " option# 2、检查用户输入的选项值if [ "$option" = "y" ]; thenredis_installbreakelif [ "$option" = "n" ]; thenLOG_TEMP_LOG=" ● ignore install:5、redis-7.2.4 "log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"breakelseecho "no effect value,please enter(y or n)"fidone# 6、安装 rabbitmqwhile true; do# 1 提示用户输入(y or n)read -p "6、do you want to install rabbitmq-3.11.28 ?(y or n) " option# 2、检查用户输入的选项值if [ "$option" = "y" ]; thenrabbitmq_installbreakelif [ "$option" = "n" ]; thenLOG_TEMP_LOG=" ● ignore install:6、rabbitmq-3.11.28 "log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"breakelseecho "no effect value,please enter(y or n)"fidone# 7、安装 syslogwhile true; do# 1 提示用户输入(y or n)read -p "7、do you want to install rsyslog-8.24.0 ?(y or n) " option# 2、检查用户输入的选项值if [ "$option" = "y" ]; thensyslog_installbreakelif [ "$option" = "n" ]; thenLOG_TEMP_LOG=" ● ignore install:7、rsyslog-8.24.0 "log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"breakelseecho "no effect value,please enter(y or n)"fidoneelsecase "$soft" in"font")font_install;;"jdk")jdk17_TencentKona_install;;"mysql")mysql_install;;"nginx")nginx_install;;"redis")redis_install;;"rabbitmq")rabbitmq_install;;"syslog")syslog_install;;"all")#1、安装 中文字体font_install# 2、安装 jdkjdk17_TencentKona_install# 3、安装 mysqlmysql_install# 4、安装 nginxnginx_install# 5、安装 redisredis_install# 6、安装 rabbitmqrabbitmq_install# 7、安装 syslogsyslog_install;;esacfi#删除解压的文件rm -rf $UNZIP_TEMP_PATH# 开放防火墙firewall_port_open# 调优系统配置sys_com_tuning# 8、打印汇总日志if [ -z "${soft}" ] ||[ "${soft}" = "all" ]; then# 打印汇总日志pirnt_sum_logfiecho " ● end: end of install exe;"
}# 卸载服务结束
remove(){# 关闭防火墙(应用不在时,有警告,需在最前面)firewall_port_close# 1、中文字体if [ -z "${soft}" ] || [ "${soft}" = "font" ]; thenfont_removefi# 2、安装jdkif [ -z "${soft}" ] || [ "${soft}" = "jdk" ]; thenjdk17_TencentKona_removefi# 3、安装 mysqlif [ -z "${soft}" ] || [ "${soft}" = "mysql" ]; thenmysql_removefi# 4、安装 nginxif [ -z "${soft}" ] || [ "${soft}" = "nginx" ]; thennginx_removefi# 5、安装 redisif [ -z "${soft}" ] || [ "${soft}" = "redis" ]; thenredis_removefi# 6、安装 rabbitmqif [ -z "${soft}" ] || [ "${soft}" = "rabbitmq" ]; thenrabbitmq_removefi# 7、安装 syslogif [ -z "${soft}" ] || [ "${soft}" = "syslog" ]; thensyslog_removefi# 8、打印汇总日志if [ -z "${soft}" ]; then# 打印汇总日志pirnt_sum_logfiecho " ● end: 卸载命令执行结束;"
}#日志
log(){# 1、中文字体if [ -z "${soft}" ] || [ "${soft}" = "font" ]; thenfont_logfi# 2、安装jdkif [ -z "${soft}" ] || [ "${soft}" = "jdk" ]; thenjdk17_TencentKona_logfi# 3、安装 mysqlif [ -z "${soft}" ] || [ "${soft}" = "mysql" ]; thenmysql_logfi# 4、安装 nginxif [ -z "${soft}" ] || [ "${soft}" = "nginx" ]; thennginx_logfi# 5、安装 redisif [ -z "${soft}" ] || [ "${soft}" = "redis" ]; thenredis_logfi# 6、安装 rabbitmqif [ -z "${soft}" ] || [ "${soft}" = "rabbitmq" ]; thenrabbitmq_logfi# 7、安装 syslogif [ -z "${soft}" ] || [ "${soft}" = "syslog" ]; thensyslog_logfi# 8、 打印汇总日志if [ -z "${soft}" ]; thenpirnt_sum_logfi
}#安装中文字体
font_install(){# 1 如果安装的字体软件都存在,则不安装font_state=`rpm -qa | grep font-config`font_cache_state=`rpm -qa | grep ttmkfdir`if [ -n "${font_state}" ] && [ -n "${font_cache_state}" ]; thenreturnfi# 2 安装字体cd $PUSH_TEMP_PATH/font/baseyum -y localinstall *.rpm# 3 将字体考到指定文件夹rm -rf $FONT_PATHmkdir -p $FONT_PATHcp -rf $PUSH_TEMP_PATH/font/chinese-font/* $FONT_PATHchmod -R 755 $FONT_PATH# 4 汇总生成fonts.scale文件ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir# 5 替换字体配置cat $PUSH_TEMP_PATH/font/conf/fonts.conf > /etc/fonts/fonts.conf# 刷新内存中的字体缓存fc-cacheecho " ● end install: chinese font;"#打印日志font_log
}#删除安装的中文字体
font_remove(){#卸载字体软件yum remove -y fontconfigyum remove -y ttmkfdir#删除上传的中文字体rm -rf $FONT_PATH#打印日志font_logecho " ● end remove: chinese font;"
}# 刷新字体配置(手工添加字体,可以执行下列命令)
font_reload(){# 刷新内存中的字体缓存fc-cache# 查看字体安装情况font_log
}# 查看 中文字体 安装情况
font_log(){#检查 中文字体 是否安装成功font_log_status=`fc-list | grep chinese`if [ "${operate}" != "remove"  ]; then# 2.1 如果操作不是卸载,且检索 中文字体 存在,打印成功,否则打印失败if [ -n "${font_log_status}" ]; thenLOG_TEMP_LOG=" ● success:install chinese font"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"echo " ${font_log_status}"elseLOG_TEMP_LOG=" ● error:install chinese font"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fielse# 2.1 如果操作是卸载,且检索 中文字体 不存在,打印成功,否则打印失败if [ -z "${font_log_status}" ]; thenLOG_TEMP_LOG=" ● success:remove chinese font"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error:remove chinese font"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"echo " ${font_log_status}"fifi
}#chrony :分布式保持时间一致性
chrony_install(){#启动开机自启systemctl start chronydsystemctl enable chronyd#设置时区位上海timedatectl set-timezone Asia/Shanghai#强制时间同步chronyc -a makestepecho " ● chronyd: 设置上海时区并自启 end;"chrony_log
}#chrony :查看日志
chrony_log(){#检查字体是否安装成功chrony_log_status=`chronyc sources –v`if [ -n "${chrony_log_status}" ]; thenLOG_TEMP_LOG=" ● sucdess:install chrony , use Time synchronizer;"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error:install chrony , use Time synchronizer;"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fi
}# jdk17_TencentKona 及运行环境安装
jdk17_TencentKona_install(){#1、安装分布式时间同步器chrony_install#2、安装相关依赖 netstat、lsof、unzip、zip、dos2unix、nohupcd $PUSH_TEMP_PATH/jdk-17-TencentKona/depend-rpmyum -y localinstall *.rpm# 3 获取JAVA_HOMEget_java_home# 3.1 如果JAVA_HOME 不为空,则退出if [ -n "${JAVA_HOME}" ]; thenreturnfiJDK_TAR_GZ_NAME="TencentKona-17.0.9.b1-jdk_linux-x86_64.tar.gz"#4、安装解压并配置java_homecp -rf $PUSH_TEMP_PATH/jdk-17-TencentKona/base/$JDK_TAR_GZ_NAME $BASE_PATHcd $BASE_PATH#加压和获取加压后的文件夹tar -zxvf $JDK_TAR_GZ_NAMEJDK_UN_TAR_NAME=$(tar -tzf "$PUSH_TEMP_PATH"/jdk-17-TencentKona/base/"$JDK_TAR_GZ_NAME" | head -1 | cut -d '/' -f 1)# 4.1 重命名解压目录和删除压缩包# 一定打开压缩吧确认一下解压后的文件夹rm -rf $BASE_PATH/jdk17-TencentKonamv $JDK_UN_TAR_NAME jdk17-TencentKonarm -rf $BASE_PATH/$JDK_TAR_GZ_NAME# echo -e "\n"才能解析成换行符echo "# set java environment" >> /etc/profileecho "export JAVA_HOME=$JAVA_HOME_PATH" >> /etc/profileecho "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profileecho "export CLASSPATH=.:\$JAVA_HOME/lib" >> /etc/profile# 5 刷新配置source /etc/profilesleep 2echo " ● end install: jdk-TencentKona-17.0.9;"# 6 显示安装结果jdk17_TencentKona_log
}# jdk17_TencentKona 删除
jdk17_TencentKona_remove(){# 1 删除环境变量sudo sed -i '/# set java environment/d' /etc/profile#用 #替换分隔符/,因为$JAVA_HOME_PATH存在/sudo sed -i "\#export JAVA_HOME=$JAVA_HOME_PATH#d" /etc/profilesudo sed -i "/export PATH=\$PATH:\$JAVA_HOME\/bin/d" /etc/profilesudo sed -i "/export CLASSPATH=.:\$JAVA_HOME\/lib/d" /etc/profile# 2 刷新配置source /etc/profilesleep 2# 3 删除解压后的文件rm -rf $JAVA_HOME_PATHjdk17_TencentKona_logecho " ● end remove: jdk-TencentKona-17.0.9;"
}# jdk17_TencentKona 删除
jdk17_TencentKona_log(){# 1 获取JAVA_HOMEget_java_homeif [ "${operate}" != "remove"  ]; then# 2.1 如果操作不是卸载,且 JAVA_HOME 不为空,打印成功,否则打印失败if [ -n "${JAVA_HOME}" ]; thenLOG_TEMP_LOG=" ● success: install jdk-TencentKona-17.0.9"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error: install jdk-TencentKona-17.0.9"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fielse# 2.1 如果操作是卸载,且 JAVA_HOME 为空,打印成功,否则打印失败if [ -z "${JAVA_HOME}" ]; thenLOG_TEMP_LOG=" ● success:remove jdk-TencentKona-17.0.9"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error:remove jdk-TencentKona-17.0.9"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fifi
}mysql_install(){# 1、安装mysql的依赖cd $PUSH_TEMP_PATH/mysql-8.0.36/depend-rpmyum -y localinstall *.rpm# 2.1 添加mysql用户组groupadd mysql#2.2 用户组添加用户useradd -g mysql mysql# 3 安装mysql的依赖cd $PUSH_TEMP_PATH/mysql-8.0.36/baseyum -y localinstall *.rpm# 4 执行初始化并指定密码/usr/sbin/mysqld --initialize --user=mysql --lower-case-table-names=1# 5 备份并修改配置rm -rf /etc/my.cnf.bakcp -rf /etc/my.cnf /etc/my.cnf.bak# 5.1 替换mysql 配置文件cat $PUSH_TEMP_PATH/mysql-8.0.36/conf/my.cnf > /etc/my.cnf# 启动MySQL服务  echo "正在启动MySQL服务..."  sudo systemctl start mysqld  # 等待MySQL服务启动完成   sleep 5# 获取默认密码DEFAULT_PASSWORD=$(sudo grep 'A temporary password' /var/log/mysqld.log | awk '{print $NF}')# 使用mysqladmin修改密码为12345678mysqladmin -u root -p"${DEFAULT_PASSWORD}" password "$MYSQL_PWD"# 重启MySQL服务sudo systemctl restart mysqld# 等待启动完成,导入数据(空库可以启动快)   sleep 5# 连接到MySQL数据库服务器并创建数据库 mysql -u"root" -p"$MYSQL_PWD" -e "CREATE DATABASE ${MYSQL_CREATE_DB_NAME}"echo " ● end install: mysql-8.0.36;"# 显示 mysql 状态mysql_log
}mysql_remove(){# 1 如果未安装mysql,则退出mysqld_install_status=`systemctl list-unit-files | grep mysqld`if [ -z "${mysqld_install_status}" ]; thenreturnfi# 停止MySQL服务  systemctl stop mysqld  # 卸载MySQL软件包及其依赖项  yum remove -y mysql mysql-server mysql-libs mysql-client-plugins mysql-common# 删除MySQL数据目录和配置文件(请谨慎操作)  rm -rf /var/lib/mysql rm -rf /etc/my.cnfrm -rf /etc/my.cnf.bakrm -rf /var/log/mysqld.logmysql_logecho " ● end remove: mysql-8.0.36;"
}mysql_log(){# 1 检测 mysql 是否自启动MYSQL_STATUS=$(systemctl is-active mysqld)if [ "${operate}" != "remove"  ]; then# 2.1 如果操作类型不是卸载,且 mysql 状态为:活跃的,打印成功,否则打印失败if [ "${MYSQL_STATUS}" = "active" ]; thenLOG_TEMP_LOG=" ● success: start mysql-8.0.36"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error: start mysql-8.0.36"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fielse#3 如果操作类型是卸载,且识别 mysql 状态为不存在 或者失败if [ "${MYSQL_STATUS}" = "unknown" ] || [ "${MYSQL_STATUS}" = "failed" ]; thenLOG_TEMP_LOG=" ● success:remove mysql-8.0.36"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error:remove mysql-8.0.36"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fifi# 4 如果单独安装 mysql,或者查看指定查看 mysql 日志,则显示日志if [ "${soft}" = "mysql" ] && { [ "${operate}" = "log" ] || [ "${operate}" = "push"  ]; }; thentail -f -n 20 /var/log/mysqld.logfi
}mysql_imp_sql(){SQL_FILE="${PUSH_TEMP_PATH}/mysql-8.0.36/conf/initDb.sql"if [ -e "$SQL_FILE" ]; thenmysql -u"root" -p"12345678" $MYSQL_CREATE_DB_NAME < "$SQL_FILE"log_array+=(" ● 执行 mysql 数据数据化。")echo " ● 执行 mysql 数据数据化。" elselog_array+=(" ● 发布包不含 mysql 数据库初始化脚本。")echo " ● 发布包不含 mysql 数据库初始化脚本。" fi
}# nginx 安装
nginx_install(){# 1 安装相关依赖cd $PUSH_TEMP_PATH/nginx-1.24.0/depend-rpmyum -y localinstall *.rpm# 2 解压相关依赖NGINX_TAR_GZ_NAME="nginx-1.24.0.tar.gz"# 3 解压cp -rf $PUSH_TEMP_PATH/nginx-1.24.0/base/$NGINX_TAR_GZ_NAME $BASE_PATHcd $BASE_PATH# 3.1 解压并获取路径tar -zxvf $NGINX_TAR_GZ_NAMENGINX_UN_TAR_NAME=$(tar -tzf "$PUSH_TEMP_PATH"/nginx-1.24.0/base/"$NGINX_TAR_GZ_NAME" | head -1 | cut -d '/' -f 1)# 4.1 进入nginx安装路径cd $BASE_PATH/$NGINX_UN_TAR_NAME# 4.2 配置nginx./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module# 4.3 执行安装make install# 5 准备使用的 www 用户groupadd -f wwwuseradd -g www wwwcd $BASE_PATH# 6 替换nginx 配置cat $PUSH_TEMP_PATH/nginx-1.24.0/conf/nginx.conf > /usr/local/nginx/conf/nginx.conf# 7 注册nginx 服务rm -rf $SYS_SERVICE_PATH/nginx.servicecp -rf $PUSH_TEMP_PATH/nginx-1.24.0/service/nginx.service $SYS_SERVICE_PATH/# 8.1 设置开机自启动#刷新服务配置systemctl daemon-reload# 8.2 开机自启systemctl enable nginx.service# 8.3 启动nginxsystemctl start nginx.service# 6.1 删除复制后的 tar.gz 包rm -rf $BASE_PATH/nginx-1.24.0rm -rf $BASE_PATH/$NGINX_TAR_GZ_NAMEecho " ● end install: nginx-1.24.0;"# 6.2 等待几秒检测 nginx 状态sleep 2nginx_log
}# nginx 删除
nginx_remove(){# 1.1 停止服务systemctl stop nginx.service# 1.2 关闭开机自启动systemctl disable nginx.serviceecho "  ▶ 已关停相关服务... "#停顿 2s 后/bin/sleep 2# 删除所有的发布文件rm -rf $BASE_PATH/nginx# 删除发布的自启服务脚本rm -rf $SYS_SERVICE_PATH/nginx.service#刷新服务配置systemctl daemon-reloadnginx_logecho " ● end remove: nginx-1.24.0;"
}# 检测 nginx 日志
nginx_log(){# 1 检测 nginx 是否自启动NGINX_STATUS=$(systemctl is-active nginx)if [ "${operate}" != "remove"  ]; then# 2.1 如果操作类型不是卸载,且 nginx 状态为:活跃的,打印成功,否则打印失败if [ "${NGINX_STATUS}" = "active" ]; thenLOG_TEMP_LOG=" ● success: start nginx-1.24.0"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error: start nginx-1.24.0"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fielse#3 如果操作类型是卸载,且识别 nginx 状态为不存在 或者失败if [ "${NGINX_STATUS}" = "unknown" ] || [ "${NGINX_STATUS}" = "failed" ]; thenLOG_TEMP_LOG=" ● success:remove nginx-1.24.0"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error:remove nginx-1.24.0"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fifi# 4 如果单独安装 nginx,或者查看指定查看 nginx 日志,则显示日志if [ "${soft}" = "nginx" ] && { [ "${operate}" = "log" ] || [ "${operate}" = "push"  ]; }; thentail -f -n 20 $BASE_PATH/nginx/logs/error.logfi
}# redis 安装
redis_install(){# 1 安装相关依赖cd $PUSH_TEMP_PATH/redis-7.2.4/depend-rpmyum -y localinstall *.rpm# 2 解压相关依赖REDIS_TAR_GZ_NAME="redis-7.2.4.tar.gz"# 3 解压cp -rf $PUSH_TEMP_PATH/redis-7.2.4/base/$REDIS_TAR_GZ_NAME $BASE_PATHcd $BASE_PATHtar -zxvf $REDIS_TAR_GZ_NAME# 4.1 重命名解压目录和删除压缩包mv redis-7.2.4 rediscd $BASE_PATH/redis# 4.2 编译和安装make && make PREFIX=$BASE_PATH/redis/ install# 6 替换nginx 配置cat $PUSH_TEMP_PATH/redis-7.2.4/conf/redis.conf > /usr/local/redis/redis.confrm -rf $SYS_SERVICE_PATH/redis.servicecp -rf $PUSH_TEMP_PATH/redis-7.2.4/service/redis.service $SYS_SERVICE_PATH/# 5.1 设置开机自启动#刷新服务配置systemctl daemon-reload# 5.3 开机自启systemctl enable redis.service# 5.3 启动 redissystemctl start redis.service# 6.1 删除复制后的 tar.gz 包rm -rf $BASE_PATH/$REDIS_TAR_GZ_NAMEecho " ● end install: redis-7.2.4;"# 6.2 等待几秒检测redis状态sleep 2redis_log
}# redis 删除
redis_remove(){# 1.1 停止服务systemctl stop redis.service# 1.2 关闭开机自启动systemctl disable redis.serviceecho "  ▶ 已关停相关服务... "#停顿 2s 后/bin/sleep 2# 删除所有的发布文件rm -rf $BASE_PATH/redis# 删除发布的自启服务脚本rm -rf $SYS_SERVICE_PATH/redis.service#刷新服务配置systemctl daemon-reloadredis_logecho " ● end remove: redis-7.2.4;"
}# 检测redis 日志
redis_log(){#1.1 检测 redis 是否自启动REDIS_STATUS=$(systemctl is-active redis)if [ "${operate}" != "remove"  ]; then# 2.1 如果操作类型不是卸载,且 redis 状态为:活跃的,打印成功,否则打印失败if [ "${REDIS_STATUS}" = "active" ]; thenLOG_TEMP_LOG=" ● success: start redis-7.2.4"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error: start redis-7.2.4"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fielse#3 如果操作类型是卸载,且识别 redis 状态为不存在 或者失败if [ "${REDIS_STATUS}" = "unknown" ] || [ "${REDIS_STATUS}" = "failed" ]; thenLOG_TEMP_LOG=" ● success:remove redis-7.2.4"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error:remove redis-7.2.4"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fifi# 4 如果单独安装 redis,或者查看指定查看 redis 日志,则显示日志if [ "${soft}" = "redis" ] && { [ "${operate}" = "log" ] || [ "${operate}" = "push"  ]; }; thentail -f -n 20 $BASE_PATH/redis/redis.logfi
}# rabbitmq 安装
rabbitmq_install(){# 1 安装相关依赖cd $PUSH_TEMP_PATH/rabbitmq-3.11.28/depend-rpmyum -y localinstall *.rpm# 2 解压erlangERLANG_TAR_GZ_NAME="otp_src_25.3.2.8.tar.gz"# 3 解压cp -rf $PUSH_TEMP_PATH/rabbitmq-3.11.28/base/$ERLANG_TAR_GZ_NAME $BASE_PATHcd $BASE_PATHtar -zxvf $ERLANG_TAR_GZ_NAME# 4.1 进入erlang 安装包cd $BASE_PATH/otp_src_25.3.2.8# 4.2 配置./configure  --prefix=/usr/local/erlang --without-javac# 4.2 编译和安装make && make install# 5 写入系统配置echo "export ERLANG_HOME=/usr/local/erlang " >> /etc/profileecho "export PATH=\$ERLANG_HOME/bin:\$PATH" >> /etc/profile# 刷新配置source /etc/profile# 5 强制安装rabbitmq rpmrpm -ivh --nodeps $PUSH_TEMP_PATH/rabbitmq-3.11.28/base/rabbitmq-server-3.11.28-1.el8.noarch.rpm# 6 替换rebbit 配置文件cat $PUSH_TEMP_PATH/rabbitmq-3.11.28/sh/rabbitmq-server > /usr/lib/rabbitmq/bin/rabbitmq-server# 5.1 强制修改hostnamehostname localhost.localdomain#启动服务systemctl start rabbitmq-server# 5.3 开机自启chkconfig rabbitmq-server onecho " ● end install: rabbitmq-3.11.28;"# 6.2 等待几秒查看日志sleep 5rabbitmq_log# 6 开启web 管理端rabbitmq-plugins enable rabbitmq_management# 6. 初始化账号密码# 6.1 创建账号rabbitmqctl add_user "${RABBITMQ_USER}" "${RABBITMQ_PWD}"# 6.2 设置用户角色rabbitmqctl set_user_tags "${RABBITMQ_USER}" administrator#6.4 设置用户权限# set_permissions [-p <vhostpath>] <user> <conf> <write> <read>rabbitmqctl set_permissions -p "/" "${RABBITMQ_USER}" ".*" ".*" ".*"#7 用户 user_admin 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限##查看当前用户和角色rabbitmqctl list_users
}# rabbitmq 删除
rabbitmq_remove(){# 1 关闭服务chkconfig rabbitmq-server off# 2 停止服务systemctl stop rabbitmq-server# 6.2 等待几秒查看sleep 5# 7.1 卸载程序rpm -e rabbitmq-server-3.11.28-1.el8.noarch# 7.2 删除环境变量sudo sed -i "/export ERLANG_HOME=\/usr\/local\/erlang/d" /etc/profilesudo sed -i "/export PATH=\$ERLANG_HOME\/bin:\$PATH/d" /etc/profile# 3 删除erlangrm -rf /usr/local/erlangrabbitmq_logecho " ● end remove: rabbitmq-3.11.28;"
}# 检测redis 日志
rabbitmq_log(){#1.1 检测 rabbitmq 是否自启动RABBITMQ_STATUS=$(systemctl is-active rabbitmq-server)if [ "${operate}" != "remove"  ]; then# 2.1 如果操作类型不是卸载,且 rabbitmq 状态为:活跃的,打印成功,否则打印失败if [ "${RABBITMQ_STATUS}" = "active" ]; thenLOG_TEMP_LOG=" ● success: start rabbitmq-3.11.28"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error: start rabbitmq-3.11.28"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fielse#3 如果操作类型是卸载,且识别 rabbitmq 状态为不存在 或者失败if [ "${RABBITMQ_STATUS}" = "unknown" ] || [ "${RABBITMQ_STATUS}" = "failed" ]; thenLOG_TEMP_LOG=" ● success:remove rabbitmq-3.11.28"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error:remove rabbitmq-3.11.28"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fifi# 4 如果单独安装 rabbitmq,或者查看指定查看 rabbitmq 日志,则显示日志if [ "${soft}" = "rabbitmq" ] && { [ "${operate}" = "log" ] || [ "${operate}" = "push"  ]; }; then# tail -f -n 20 /var/log/rabbitmq/rabbit@*.logtail -f -n 20 /var/log/rabbitmq/rabbit@$(hostname).logfi
}# syslog 安装
syslog_install(){# 1 安装 syslogyum -y localinstall $PUSH_TEMP_PATH/syslog-8.24.0/base/rsyslog-8.24.0-57.el7_9.3.x86_64.rpm# 2 替换syslog 配置cat $PUSH_TEMP_PATH/syslog-8.24.0/conf/rsyslog.conf > /etc/rsyslog.conf# 4.1 刷新服务systemctl daemon-reload# 4.2 重新启动systemctl restart rsyslog# 4.3 开机自启systemctl enable rsyslogecho " ● end install: syslog-8.24.0;"# 5 等待几秒检测 syslog 状态sleep 2syslog_log
}# syslog 删除
syslog_remove(){# 1 关闭开机自启动systemctl disable rsyslog# 2 停止服务systemctl stop rsyslog# 3 卸载程序rpm -e rsyslog-8.24.0-57.el7_9.3.x86_64sleep 2syslog_logecho " ● end remove: rsyslog-8.24.0;"
}# 检测 syslog 日志
syslog_log(){#1.1 检测 syslog 是否自启动SYSLOG_STATUS=$(systemctl is-active rsyslog)if [ "${operate}" != "remove"  ]; then# 2.1 如果操作类型不是卸载,且 syslog 状态为:活跃的,打印成功,否则打印失败if [ "${SYSLOG_STATUS}" = "active" ]; thenLOG_TEMP_LOG=" ● success: start rsyslog-8.24.0"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error: start rsyslog-8.24.0"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fielse#3 如果操作类型是卸载,且识别 syslog 状态为不存在 或者失败if [ "${SYSLOG_STATUS}" = "unknown" ] || [ "${SYSLOG_STATUS}" = "failed" ]; thenLOG_TEMP_LOG=" ● success:remove rsyslog-8.24.0"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"elseLOG_TEMP_LOG=" ● error:remove rsyslog-8.24.0"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"fifi# 4 如果单独安装 syslog,或者查看指定查看 syslog 日志,则显示日志if [ "${soft}" = "syslog" ] && { [ "${operate}" = "log" ] || [ "${operate}" = "push"  ]; }; thentail -f -n 20 /var/log/messagesfi
}#解压tar包
un_tar_gz(){#1 删除可能存在的解压不全的临时文件rm -rf $UNZIP_TEMP_PATH#2 创建加压的文件夹mkdir -p $UNZIP_TEMP_PATH#2 进行解压操作tar -zxvf $PUSH_SH_PATH/$TAR_GZ_NAME -C $UNZIP_TEMP_PATH #3 获取加压后的文件路径#UNZIP_DIR_NAME=$(echo "$UNZIP_TEMP_PATH"/* | awk '{print $1}' | xargs basename)UNZIP_DIR_NAME=$(tar -tzf "$PUSH_SH_PATH"/"$TAR_GZ_NAME" | head -1 | cut -d '/' -f 1)#4 获取到解压后的真实路径PUSH_TEMP_PATH=$UNZIP_TEMP_PATH/$UNZIP_DIR_NAME
}# 获取JAVA_HOME
get_java_home(){# 1、如果JAVA_HOME 不为空,则退出if [ -n "${JAVA_HOME}" ]; thenreturnfi#2、通过java程序查找(如果是子shell 可能读不到)JAVA_PATH=$(which java)if [ -n "${JAVA_PATH}" ]; then# 获取java的上2级作为JAVA_HOMEJAVA_HOME=$(dirname "$(dirname "$JAVA_PATH")")else#3、读取不到,则读取配置文件JAVA_HOME=$(grep -m 1 'JAVA_HOME=' /etc/profile | awk -F= '{print $2}' | tr -d ' ')fi
}#打印中途记录的在log_array内的内容
pirnt_sum_log(){# 打印数组的每个元素echo "-----------------------summary-log-start------------------------------"for element in "${log_array[@]}"; doecho "$element"doneecho "-----------------------summary-log-end ------------------------------"
}#防火墙开放端口
firewall_port_open(){# 定义要检查的端口号PORT=88# 检查指定端口是否已经开放if sudo firewall-cmd --list-ports | grep -q "\<$PORT\/tcp\>"; thenLOG_TEMP_LOG=" ● 端口 $PORT 已经开放,跳过"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"return;fiecho "调整 firewall 防火墙:"firewall-cmd --zone=public --add-port=88/tcp --permanentfirewall-cmd --zone=public --add-port=3306/tcp --permanentfirewall-cmd --reload# 防火墙日志firewall_port_log
}#防火墙关闭端口
firewall_port_close(){echo "调整 firewall 防火墙:"firewall-cmd --zone=public --remove-port=88/tcp --permanentfirewall-cmd --zone=public --remove-port=3306/tcp --permanentfirewall-cmd --reload# 防火墙日志firewall_port_log
}#防火墙日志
firewall_port_log(){open_ports=$(firewall-cmd --list-ports)LOG_TEMP_LOG=" ● firewall-cmd open port:${open_ports}"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"
}# 系统调优(RedHat系列linux)
sys_com_tuning(){# 搜索文件中是否包含指定文本if grep -q "# 全局的打开文件数" "/etc/systemd/system.conf"; thenLOG_TEMP_LOG=" ● 系统配置 已调优(适配 RedHat系列linux),跳过"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"returnfi# 1 调整systemctl管理的 servie 资源限制echo "# 全局的打开文件数" >> /etc/systemd/system.confecho "DefaultLimitNOFILE=1048576" >> /etc/systemd/system.confecho "# 全局打开进程数" >> /etc/systemd/system.confecho "DefaultLimitNPROC=65535" >> /etc/systemd/system.conf# 2 调整系统内核参数echo "# 全局:端口最大的监听队列的长度,可为:32768" >> /etc/sysctl.confecho "net.core.somaxconn=32768" >> /etc/sysctl.confecho "# 内存分配模式:1为不限制" >> /etc/sysctl.confecho "vm.overcommit_memory = 1" >> /etc/sysctl.confecho "# 单进程打开文件句柄数" >> /etc/sysctl.confecho "fs.nr_open = 2097152" >> /etc/sysctl.confecho "# 系统打开文件句柄数" >> /etc/sysctl.confecho "fs.file-max = 102400" >> /etc/sysctl.conf# 2.1 刷新内核参数,立即生效/sbin/sysctl -p# 3 调整用户组资源限制echo "# 用户会话的 打开文件句柄数" >> /etc/security/limits.confecho "* soft nofile 1048576" >> /etc/security/limits.confecho "* hard nofile 1048576" >> /etc/security/limits.confecho "# 用户会话的 打开进程数限制" >> /etc/security/limits.confecho "* soft nproc 65535" >> /etc/security/limits.confecho "* hard nproc 65535" >> /etc/security/limits.confLOG_TEMP_LOG=" ● 系统配置 调优完成(适配 RedHat系列linux)"log_array+=("$LOG_TEMP_LOG")echo "$LOG_TEMP_LOG"
}#根据输入参数,选择执行对应方法,不输入则执行使用说明 
case "$1" in"push") push ;;"remove") remove ;;"log") log ;;*)
usage 
;; 
esac

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构与算法】:非递归实现快速排序、归并排序

&#x1f525;个人主页&#xff1a; Quitecoder &#x1f525;专栏&#xff1a;数据结构与算法 上篇文章我们详细讲解了递归版本的快速排序&#xff0c;本篇我们来探究非递归实现快速排序和归并排序 目录 1.非递归实现快速排序1.1 提取单趟排序1.2 用栈实现的具体思路1.3 代码…

Linux:git的基础操作

git的下载 版本控制系统一般分为两种&#xff0c;集中式版本控制系统&#xff0c;分布式版本控制系统 什么是集中式版本控制系统&#xff1a;版本库集中存放在中央服务器&#xff0c;工作时候使用自己的电脑&#xff0c;当工作时候在中央服务器上拉取最新版本的代码&#xff0c…

U盘变身“本地磁盘”?数据恢复与防范策略大揭秘

一、突发状况&#xff1a;U盘秒变“本地磁盘” 在日常工作生活中&#xff0c;U盘凭借其便携性和大容量&#xff0c;成为我们存储和传输数据的重要工具。然而&#xff0c;有时我们会遇到这样一个棘手的问题&#xff1a;原本应显示为可移动磁盘的U盘&#xff0c;在插入电脑后却突…

Nginx 的安装、启动和关闭

文章目录 一、背景说明二、Nginx 的安装2.1、依赖的安装2.2、Nginx 安装2.3、验证安装 三、启动 Nginx3.1、普通启动3.2、如何判断nginx已启动3.3、通过配置启动3.4、设置开机启动 四、关闭 Nginx4.1、优雅地关闭4.2、快速关闭4.3、只关闭主进程4.4、使用nginx关闭服务 五、重启…

R语言:microeco:一个用于微生物群落生态学数据挖掘的R包:第七:trans_network class

# 网络是研究微生物生态共现模式的常用方法。在这一部分中&#xff0c;我们描述了trans_network类的所有核心内容。 # 网络构建方法可分为基于关联的和非基于关联的两种。有几种方法可以用来计算相关性和显著性。 #我们首先介绍了基于关联的网络。trans_network中的cal_cor参数…

编曲学习:如何编写钢琴织体 Cubase12逻辑预置 需要弄明白的问题

钢琴织体是指演奏形式、方式,同一个和弦进行可以用很多种不同的演奏方法。常用织体有分解和弦,柱式和弦,琶音织体,混合织体。 在编写钢琴织体前,先定好歌曲的调。 Cubase小技巧:把钢琴轨道向上拖动打和弦轨道,就可以显示和弦!如果你有一些参考工程,不知道用了哪些和…

yum安装mysql及数据库补全功能

centos7上面没有mysql&#xff0c;它的数据库名字叫做mariadb [rootlocalhost ~]#yum install mariadb-server -y [rootlocalhost ~]#systemctl start mariadb.service [rootlocalhost ~]#systemctl stop firewalld [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#ss -na…

kerberos验证协议安装配置使用

一、kerberos是什么 Kerberos 是一个网络身份验证协议&#xff0c;用于在计算机网络中进行身份验证和授权。它提供了一种安全的方式&#xff0c;允许用户在不安全的网络上进行身份验证&#xff0c;并获取访问网络资源的权限。 二、安装配置kerberos服务端 1、安装kerberos #检…

微信小程序 nodejs+vue+uninapp学生在线选课作业管理系统

基于微信小程序的班级作业管理助手使用的是MySQL数据库&#xff0c;nodejs语言和IDEA以及微信开发者工具作为开发工具&#xff0c;这些技术和工具我在日常的作业中都经常的使用&#xff0c;并且因为对编程感兴趣&#xff0c;在闲暇时间也进行的进行编程的提高&#xff0c;所以在…

计算机二级(Python)真题讲解每日一题:《十字叉》

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬ ‪‬‪‬‪‬‪‬‪‬‮‬‪…

二、python基础

一、关键字&#xff08;保留字&#xff09; 指在python中赋予特定意义的一类单词&#xff0c;不能将关键字作为函数、变量、类、模块的名称 import keyword#利用内存模块keyword print(keyword.kwlist)#输出所有关键 print(len(keyword.kwlist))#利用内置函数len()输出关键字的…

SpringBoot ApplicationListener实现发布订阅模式

文章目录 前言一、Spring对JDK的扩展二、快速实现发布订阅模式 前言 发布订阅模式(Publish-Subscribe Pattern)通常又称观察者模式&#xff0c;它被广泛应用于事件驱动架构中。即一个事件的发布&#xff0c;该行为会通过同步或者异步的方式告知给订阅该事件的订阅者。JDK中提供…

Error response from daemon Get server gave HTTP response to HTTPS client

使用docker compose拉起docker镜像时&#xff0c;若出现如下报错 Error response from daemon: Get "https://devops.test.cn:5000/v2/": http: server gave HTTP response to HTTPS client表示Docker守护进程无法从指定url获取响应&#xff0c; 可能原因有以下&…

苍穹外卖-day09:用户端历史订单模块(理解业务逻辑),商家端订单管理模块(理解业务逻辑),校验收货地址是否超出配送范围(相关API)

用户端历史订单模块 1. 查询历史订单&#xff08;分页查询&#xff09; 1.1 需求分析和设计 产品原型&#xff1a; 业务规则 分页查询历史订单可以根据订单状态查询展示订单数据时&#xff0c;需要展示的数据包括&#xff1a;下单时间、订单状态、订单金额、订单明细&#…

软考76-上午题-【面向对象技术3-设计模式】-创建型设计模式01

一、创建型设计模式一览 二、创建型设计模式 2-1、创建型设计模式的概念 一个类创建型模式使用继承改变被实例化的类&#xff1b; 一个对象创建型模式将实例化委托给另一个对象。 对应java的new一个对象。 2-2、简单工厂模式&#xff08;静态工厂方法&#xff09; 简单工厂…

猫头虎分享已解决Bug || TypeError: Cannot interpret ‘float‘ value as integer.

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

利用自定义 URI Scheme 在 Android 应用中实现安全加密解密功能

在现代移动应用开发中&#xff0c;安全性和用户体验是至关重要的考虑因素。在 Android 平台上&#xff0c;开发人员可以利用自定义 URI Scheme 和 JavaScript 加密解密技术来实现更安全的数据传输和处理。本文将介绍如何在 Android 应用中注册自定义 URI Scheme&#xff0c;并结…

计算机组成原理——自己制作一个cpu

cpu包括单周期cpu、中断cpu、多周期cpu 代码实现之后在实验箱看效果&#xff0c;并且看波形图 单周期波形 中断cpu 多周期cpu 1.单周期CPU总体电路图 如图是一个简单的基本上能够在单周期CPU上完成所要求设计的指令功能的数据通路和必要的控制线路图。其中指令和数据各存储在不…

超越想象的数据可视化:五大工具引领新潮流

在数据分析领域&#xff0c;数据可视化工具是每位分析师的得力助手。它们能够将复杂的数据转化为直观、易懂的图表和图像&#xff0c;帮助分析师快速洞察数据背后的规律与趋势。下面&#xff0c;我将从数据分析师的角度&#xff0c;为大家介绍五个常用的数据可视化工具。 一、…

【vue.js】文档解读【day 5】| ref模板引用

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 模板引用前言访问模板引用模板引用与v-if、v-show的结合v-for中的模板引用函数模板引用 模板引用 前言 …