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.rhkb.cn/news/278449.html

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

相关文章

在Latex中优雅的插入svg图片(Ubuntu22.04)

文章目录 一、前言二、准备工作三、脚本编程四、结论 一、前言 在 LaTeX \LaTeX LATE​X 中&#xff0c;插入图片常用的为 figure 环境加 \includegraphics 命令&#xff1a; \begin{figure}[!htbp]\centering\includegraphics[width\textwidth]{图片名.jpg/jpeg/png/pdf}\c…

【LeetCode热题100】 226. 翻转二叉树(二叉树)

一.题目要求 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 二.题目难度 简单 三.输入样例 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;…

文件处理(二)

CSV文件的读取和写入 CSV文件的操作 csv是逗号分隔符文本格式&#xff0c;常用于数据交换、Excel文件和数据库数据的导入和导出。 与Excel文件不同&#xff0c;CSV文件中&#xff1a; 值没有类型&#xff0c;所有值都是字符串不能指定字体颜色等样式不能指定单元格的宽高&…

【自动驾驶可视化工具】

自动驾驶可视化工具 自动驾驶可视化工具1.百度Apollo的Dreamview:2.Cruise的Worldview:3.Uber的AVS:4.Fglovex Studio: 自动驾驶可视化工具 介绍一下当前主流的自动驾驶可视化工具。 1.百度Apollo的Dreamview: Dreamview是百度Apollo平台开发的一种可视化工具&#xff0c;用…

滑块验证码

1.这里针对滑块验证给了一个封装的组件verifition&#xff0c;使用直接可以调用 2.组件目录 3.每个文件的内容 3.1 Api文件中只有一个index.js文件&#xff0c;用来存放获取滑块和校验滑块结果的api import request from /router/axios//获取验证图片 export function reqGe…

centos7.9的GUI桌面样式不符合默认熟悉的操作习惯

一、问题描述&#xff1a; 原因&#xff1a;桌面样式选错了。 二、解决&#xff1a; 1.先登进去LogOut。 2.点击设置的工具图标中的GNOME Classic即可恢复成默认操作习惯的桌面样式。 3.恢复到默认熟悉的操作界面

(一)Neo4j下载安装以及初次使用

&#xff08;一&#xff09;下载 官网地址&#xff1a;Neo4j Graph Database & AnamConnect data as its stored with Neo4j. Perform powerful, complex queries at scale and speed with our graph data platform.https://neo4j.com/ &#xff08;二&#xff09;安装并配…

系统明天上线,PG表空间还不规划好疯狂给同事埋雷

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

天眼销批量查询功能上线

天眼销是一款提供企业线索的产品&#xff0c;致力于帮助客户获取最新的企业联系方式、工商信息等关键数据。 数据库收录全国 3.3亿及以上企业(含个体)线索&#xff0c;涵盖企业名称、企业状态、注册时间、注册资本、经营范围、法人信息、联系方式等维度&#xff0c;为用户提供…

【python开发】并发编程(上)

并发编程&#xff08;上&#xff09; 一、进程和线程&#xff08;一&#xff09;多线程&#xff08;二&#xff09;多进程&#xff08;三&#xff09;GIL锁 二、多线程开发&#xff08;一&#xff09;t.start()&#xff08;二&#xff09;t.join()&#xff08;三&#xff09;t.…

数据的响应式:实现动态数据驱动的技巧

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:StepperItem)

用作Stepper组件的页面子组件。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 接口 StepperItem() 属性 参数名参数类型参数描述prevLabelstring设置左侧文本按钮内…

upload文件上传漏洞复现

什么是文件上传漏洞&#xff1a; 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷&#xff0c;而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马&#xff0c;病毒&#xff0c;恶意脚本或者WebShell等。“…

LeetCode108题:将有序数组转换为二叉搜索树(python3)

一个容易想到的思路&#xff1a;使用 nums 中最靠近中心的位置作为整棵 BST 的根节点&#xff0c;确保左右子树节点数量平衡。随后递归构造 nums 中下标范围为 [0,mid−1]作为左子树&#xff0c;递归构造 nums 中下标范围为 [mid1,n−1]作为右子树。 # Definition for a binar…

理论学习:with torch.no_grad()

如果不加上“with torch.no_grad():”&#xff0c;模型参数会发生改变吗&#xff1f; 如果不使用with torch.no_grad():&#xff0c;在进行模型推理&#xff08;即计算outputs_cls net(inputs[batch_size//2:])这一步&#xff09;时&#xff0c;模型参数不会发生改变&#xf…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)中篇

onBeforeUnload onBeforeUnload(callback: (event?: { url: string; message: string; result: JsResult }) > boolean) 刷新或关闭场景下&#xff0c;在即将离开当前页面时触发此回调。刷新或关闭当前页面应先通过点击等方式获取焦点&#xff0c;才会触发此回调。 参数…

开发验证一切正常,而测试人员在性能测试时偶发报错,如何解决?

在业务系统逻辑实现中&#xff0c;经常涉及异步执行、异步更新场景的开发和使用。但在性能测试中&#xff0c;经常会出现因为异步逻辑设计不合理引发的不可预知问题&#xff0c;比如在开发验证时一切正常&#xff0c;测试人员在性能测试时偶发报错。 本文从Spring事务、业务逻辑…

前端三件套 | 综合练习:模拟抽奖活动,实现一个简单的随机抽取并显示三名获胜者

随机运行结果如下&#xff1a; 参考代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…

P2934 [USACO09JAN] Safe Travel G 题解

题意 给定一张 n n n 个点 m m m 条边的无向图&#xff0c;对于每个除 1 1 1 以外的点 u u u&#xff0c;求在不允许经过原来从 1 1 1 到 u u u 的最短路径的最后一条边时&#xff0c; 1 1 1 到 u u u 的最短路。 保证 1 1 1 到其他点的最短路唯一&#xff0c;无解输出…

git撤回代码提交commit或者修改commit提交注释

执行commit后&#xff0c;还没执行push时&#xff0c;想要撤销之前的提交commit 撤销提交 使用命令&#xff1a; git reset --soft HEAD^命令详解&#xff1a; HEAD^ 表示上一个版本&#xff0c;即上一次的commit&#xff0c;也可以写成HEAD~1 如果进行两次的commit&#xf…