当前位置: 首页 > news >正文

脚本化挂在物理盘、nfs、yum、pg数据库、nginx(已上传脚本)

文章目录

  • 前言
  • 一、什么是脚本化安装
  • 二、使用步骤
    • 1.物理磁盘脚本挂载(离线)
    • 2.yum脚本化安装(离线)
    • 3.nfs脚本化安装(离线)
    • 4.pg数据库脚本化安装(离线)
    • 5.nginx脚本化安装(离线)
  • 总结


前言

在Linux中,Shell脚本是一种强大的工具,用于自动化任务和管理系统。编写Shell脚本时,需要遵循一定的格式和规范,以确保脚本的可读性和可维护性。


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是脚本化安装

Linux脚本是一种可以在Linux或其他类Unix操作系统上运行的脚本语言。它可以用于自动化系统管理任务、软件开发、数据处理等各种任务。脚本通常是以文本文件的形式编写,其中包含一系列命令和语句,这些命令和语句可以在终端或脚本解释器中执行。

底层原理是,当用户运行脚本时,操作系统会将其交给解释器解释执行。解释器会逐行读取脚本文件,将每一行转化为对应的操作系统命令进行执行。因为Linux脚本语言是一种解释型语言,所以它可以在不同的平台和系统上运行,而不需要进行编译。这使得脚本编写和调试更加容易。

脚本语言的优点是它具有易读性、易维护性、易于使用的特点。Linux脚本可以处理多种文本格式,包括CSV、XML、JSON等。此外,它还具有强大的系统管理功能,如文件管理、进程管理、网络管理等。因此,它在自动化运维、软件开发、数据处理等领域广泛应用。

二、使用步骤

1.物理磁盘脚本挂载(离线)

使用方法
将代码保存为.sh格式

dos2unix 物理盘挂载.sh     ----转载为linux可识别的语言
sh 物理盘挂载.sh           ----根据提示填写信息即可

代码

#!/bin/bash# 检查是否以root用户运行
if [ "$EUID" -ne 0 ]; thenecho "请以root用户或使用sudo运行此脚本"exit 1
fi# 列出所有块设备
echo "当前块设备列表:"
lsblk# 提示用户输入设备路径
read -p "请输入要格式化的磁盘设备路径(例如 /dev/vdb):" DEVICE_PATH# 检查设备是否存在
if [ ! -e "$DEVICE_PATH" ]; thenecho "设备 $DEVICE_PATH 不存在,请检查路径是否正确!"exit 1
fi# 提示用户确认设备路径
echo "您选择的设备是:$DEVICE_PATH"
read -p "请确认是否继续格式化此设备?(y/n): " CONFIRMif [ "$CONFIRM" != "y" ]; thenecho "操作已取消。"exit 0
fi# 提示用户选择文件系统类型
echo "请选择要使用的文件系统类型:"
echo "1. ext3"
echo "2. ext4"
echo "3. xfs"
echo "4. btrfs"
read -p "输入选项(1-4):" FILESYSTEM_OPTION# 根据用户选择设置文件系统类型
case $FILESYSTEM_OPTION in1) FILESYSTEM="ext3";;2) FILESYSTEM="ext4";;3) FILESYSTEM="xfs";;4) FILESYSTEM="btrfs";;*) echo "无效选项,默认使用 ext3"; FILESYSTEM="ext3";;
esac# 格式化磁盘
echo "格式化 $DEVICE_PATH 为 $FILESYSTEM 文件系统..."
if [ "$FILESYSTEM" == "xfs" ]; thenmkfs.xfs "$DEVICE_PATH"
elif [ "$FILESYSTEM" == "btrfs" ]; thenmkfs.btrfs "$DEVICE_PATH"
elsemkfs.$FILESYSTEM "$DEVICE_PATH"
fi# 提示用户输入挂载点路径
read -p "请输入挂载点路径(例如 /vdb):" MOUNT_POINT# 创建挂载点目录
echo "创建挂载点目录 $MOUNT_POINT..."
mkdir -p "$MOUNT_POINT"# 挂载设备到挂载点
echo "挂载 $DEVICE_PATH 到 $MOUNT_POINT..."
mount "$DEVICE_PATH" "$MOUNT_POINT"# 编辑 /etc/fstab 文件,以确保系统重启后自动挂载
echo "编辑 /etc/fstab 文件以确保系统重启后自动挂载..."
echo "$DEVICE_PATH $MOUNT_POINT $FILESYSTEM defaults 0 0" >> /etc/fstab# 检查挂载是否成功
echo "检查挂载是否成功..."
mount -a# 列出所有块设备,确认挂载
echo "当前块设备列表:"
lsblk# 重启系统
echo "系统将在5秒后重启..."
sleep 5
reboot

在这里插入图片描述

2.yum脚本化安装(离线)

使用方法和上面差不多

dos2unix yum.sh
sh yum.sh
#!/bin/bash# 检查是否以root用户运行
if [ "$EUID" -ne 0 ]; thenecho "请以root用户或使用sudo运行此脚本"exit 1
fi# 提示用户输入挂载点路径(默认为 /media/cdrom)
read -p "请输入挂载点路径(默认为 /media/cdrom):" MOUNT_POINT# 如果用户未输入挂载点路径,则使用默认值
if [ -z "$MOUNT_POINT" ]; thenMOUNT_POINT="/media/cdrom"
fi# 创建挂载点目录
echo "创建挂载点目录 $MOUNT_POINT..."
mkdir -p "$MOUNT_POINT"# 显示磁盘使用情况
echo "当前磁盘使用情况:"
df -h# 备份原有yum仓库配置
echo "备份原有yum仓库配置..."
cp -rf /etc/yum.repos.d /etc/yum.repos.d_bak# 清除原有yum仓库配置
echo "清除原有yum仓库配置..."
rm -rf /etc/yum.repos.d/*# 创建新的yum仓库配置文件
echo "创建新的yum仓库配置文件..."
cat <<EOF > /etc/yum.repos.d/Media.repo
[iso]
name=Media
baseurl=file://${MOUNT_POINT}/
gpgcheck=0
enabled=1
EOF# 编辑fstab文件以自动挂载光驱
echo "编辑 /etc/fstab 文件以自动挂载光驱..."
echo "/dev/sr0   ${MOUNT_POINT}   iso9660   defaults   0   0" >> /etc/fstab# 重新加载systemd配置
echo "重新加载systemd配置..."
systemctl daemon-reload# 挂载所有文件系统
echo "挂载所有文件系统..."
mount -a# 停止并禁用防火墙
echo "停止并禁用防火墙..."
systemctl stop firewalld
systemctl disable firewalld# 清除yum缓存并重建
echo "清除yum缓存并重建..."
yum clean all
yum makecache# 列出可用的软件包
echo "列出可用的软件包..."
yum list# 确认挂载成功
echo "挂载点 $MOUNT_POINT 的挂载状态:"
mount | grep "$MOUNT_POINT"# 完成提示
echo "配置完成!挂载点已设置为 $MOUNT_POINT,yum仓库已配置。"

在这里插入图片描述

3.nfs脚本化安装(离线)

使用方法

dos2unix nfs.sh
sh nfs.sh

代码

#!/bin/bash# 安装nfs-utils和rpcbind
echo "安装nfs-utils和rpcbind..."
yum install -y nfs-utils rpcbind# 提示用户输入共享路径的目录
read -p "请输入NFS共享目录的路径(例如 /home/nfs): " SHARE_DIR# 如果用户没有输入,则使用默认值 /home/nfs
if [ -z "$SHARE_DIR" ]; thenSHARE_DIR="/home/nfs"echo "未输入共享目录路径,使用默认值 $SHARE_DIR"
fi# 创建NFS共享目录
echo "创建NFS共享目录 $SHARE_DIR..."
mkdir -p "$SHARE_DIR"
chmod -R 777 "$SHARE_DIR"  # 将权限改为777# 配置exports文件
echo "配置 /etc/exports..."
cat > /etc/exports <<EOF
$SHARE_DIR *(rw,sync,no_root_squash)
EOF# 重新加载exports配置
echo "重新加载exports配置..."
exportfs -ra# 启动并启用nfs服务
echo "启动nfs服务..."
systemctl start nfs-serverecho "设置nfs服务开机自启动..."
systemctl enable nfs-serverecho "NFS服务器配置完成。"# 提示用户是否在本地安装NFS客户端
read -p "是否在本地安装NFS客户端?(y/n, 默认n): " INSTALL_LOCALif [[ "$INSTALL_LOCAL" == "y" ]]; then# 安装nfs客户端echo "安装nfs客户端..."yum install -y nfs-utilsecho "NFS客户端安装完成。"
fi# 提示用户输入目标服务器的IP地址,支持多个IP地址
read -p "请输入目标服务器的IP地址,多个IP地址用逗号分隔(留空跳过): " TARGET_IPS# 如果用户没有输入目标IP地址,则跳过分发步骤
if [ -z "$TARGET_IPS" ]; thenecho "未输入目标服务器IP地址,跳过分发步骤。"
else# 将逗号分隔的IP地址转换为数组IFS=',' read -r -a TARGET_IP_ARRAY <<< "$TARGET_IPS"# 定义目标服务器的用户名(默认 root)TARGET_USER="root"# 定义目标服务器上的目标路径TARGET_DIR="/root/"# 定义脚本文件名SCRIPT_FILE="setup_nfs.sh"# 将当前脚本内容保存到临时文件echo "将当前脚本保存为临时文件 $SCRIPT_FILE ..."cat > "$SCRIPT_FILE" <<EOF
#!/bin/bash# 安装nfs-utils和rpcbind
echo "安装nfs-utils和rpcbind..."
yum install -y nfs-utils rpcbind# 提示用户输入共享路径的目录
read -p "请输入NFS共享目录的路径(例如 /home/nfs): " SHARE_DIR# 如果用户没有输入,则使用默认值 /home/nfs
if [ -z "\$SHARE_DIR" ]; thenSHARE_DIR="/home/nfs"echo "未输入共享目录路径,使用默认值 \$SHARE_DIR"
fi# 创建NFS共享目录
echo "创建NFS共享目录 \$SHARE_DIR..."
mkdir -p "\$SHARE_DIR"
chmod -R 777 "\$SHARE_DIR"  # 将权限改为777# 配置exports文件
echo "配置 /etc/exports..."
cat > /etc/exports <<EOL
\$SHARE_DIR *(rw,sync,no_root_squash)
EOL# 重新加载exports配置
echo "重新加载exports配置..."
exportfs -ra# 启动并启用nfs服务
echo "启动nfs服务..."
systemctl start nfs-serverecho "设置nfs服务开机自启动..."
systemctl enable nfs-serverecho "NFS服务器配置完成。"
EOF# 设置脚本权限chmod +x "$SCRIPT_FILE"# 遍历所有目标服务器,发送并执行脚本for TARGET_IP in "${TARGET_IP_ARRAY[@]}"; doecho "处理目标服务器 $TARGET_IP..."# 确保目标路径存在echo "在目标服务器 $TARGET_IP 上创建目标路径 $TARGET_DIR ..."ssh "$TARGET_USER@$TARGET_IP" "mkdir -p $TARGET_DIR"# 将脚本发送到目标服务器echo "将脚本 $SCRIPT_FILE 发送到目标服务器 $TARGET_IP ..."scp "$SCRIPT_FILE" "$TARGET_USER@$TARGET_IP:$TARGET_DIR"# 在目标服务器上执行脚本echo "在目标服务器 $TARGET_IP 上执行脚本..."ssh "$TARGET_USER@$TARGET_IP" "chmod +x $TARGET_DIR/$SCRIPT_FILE && $TARGET_DIR/$SCRIPT_FILE"done# 删除本地的临时脚本文件echo "删除本地的临时脚本文件 $SCRIPT_FILE ..."rm "$SCRIPT_FILE"echo "NFS配置脚本已成功发送并在所有目标服务器上执行。"
fi

在这里插入图片描述

4.pg数据库脚本化安装(离线)

使用方法

dos2unix pg.sh
sh pg.sh

代码

#!/bin/bashset -e  # 出现错误时退出脚本function setup_logging {log_file="/var/log/pg_install.log"touch "$log_file"exec > >(tee -i "$log_file") 2>&1echo "日志文件:$log_file"
}function install_postgresql {# 引入日志记录setup_logging# 提示用户输入源码包的存放路径echo "请输入 PostgreSQL 源码包的存放路径(例如 /data/sources):"read -r source_path# 在指定路径下查找 .tar.gz 或 .tar 文件source_file=$(find "$source_path" -type f \( -name "*.tar.gz" -o -name "*.tar" \) -print -quit)# 检查是否找到文件if [ -z "$source_file" ]; thenecho "未在路径 $source_path 下找到 .tar.gz 或 .tar 文件。请检查路径并重新运行脚本。"exit 1fi# 解压找到的源码包echo "正在解压 $source_file..."tar -zxvf "$source_file"# 获取解压后的目录名tar_dir=$(tar -tf "$source_file" | head -1 | cut -f1 -d"/")# 进入解压后的目录cd "$tar_dir" || { echo "无法进入目录 $tar_dir。请检查解压结果。"; exit 1; }# 添加 PostgreSQL 用户useradd postgresql# 提示用户是否要手动设置密码echo "是否要手动设置 PostgreSQL 用户的密码? (y/n)"read -r answerif [[ "$answer" == "y" ]]; then# 提示用户手动输入密码passwd postgresqlelse# 使用默认密码 root1234echo "postgresql:root1234" | chpasswdecho "默认密码 root1234 已设置。"fi# 提示用户是否已经手动创建了数据目录echo "是否已经手动创建了 PostgreSQL 数据目录? (y/n)"read -r data_dir_answerif [[ "$data_dir_answer" != "y" ]]; then# 提示用户输入数据目录路径echo "请输入 PostgreSQL 数据目录的路径(例如 /data/postgresql/data):"read -r data_dir_path# 创建 PostgreSQL 数据目录mkdir -p "$data_dir_path"chown -R postgresql:postgresql "$data_dir_path"chmod 750 "$data_dir_path"else# 提示用户输入现有的数据目录路径echo "请输入现有的 PostgreSQL 数据目录的路径(例如 /data/postgresql/data):"read -r data_dir_pathfi# 提示用户是否已经手动创建了安装路径echo "是否已经手动创建了 PostgreSQL 安装路径(例如 /data/postgresql/pgsql)? (y/n)"read -r install_dir_answerif [[ "$install_dir_answer" != "y" ]]; then# 提示用户输入 PostgreSQL 安装路径echo "请输入 PostgreSQL 安装路径(例如 /data/postgresql/pgsql):"read -r install_path# 创建 PostgreSQL 安装路径mkdir -p "$install_path"chown -R postgresql:postgresql "$install_path"chmod 750 "$install_path"else# 提示用户输入现有的安装路径echo "请输入现有的 PostgreSQL 安装路径(例如 /data/postgresql/pgsql):"read -r install_pathfi# 更新 yum 缓存yum makecache fast# 定义依赖包列表dependencies=(readline-develsystemtapsystemtap-sdt-develperl-ExtUtils-Embedpampam-devellibxml2libxml2-devellibxsltlibxslt-develpython3-devellibicu-develzlib-devel)# 检查并安装缺失的依赖包for pkg in "${dependencies[@]}"; doif ! rpm -q "$pkg" &> /dev/null; thenecho "未安装依赖包 $pkg,正在安装..."yum install -y "$pkg"fidone# 特殊处理 python2-develif ! rpm -q python2-devel &> /dev/null; thenecho "未找到 python2-devel,尝试安装 python3-devel 替代..."yum install -y python3-develfi# 配置 PostgreSQL 的安装选项./configure --prefix="$install_path" --with-pgport=5432 --with-libraries="$install_path/lib" --with-includes="$install_path/include" --with-perl --with-python --with-openssl --with-pam --with-libxml --with-libxslt# 编译并安装 PostgreSQLmake && make install# 设置安装目录权限chown -R postgresql:postgresql "$install_path"chmod 750 "$install_path"# 初始化数据库su - postgresql -c "$install_path/bin/initdb -D $data_dir_path"# 启动 PostgreSQL 服务su - postgresql -c "$install_path/bin/pg_ctl -D $data_dir_path -l $data_dir_path/logfile start"# 修改环境变量cat <<EOF >> /etc/profile
export PATH=$install_path/bin:\$PATH
export PGHOME=$install_path
export PGDATA=$data_dir_path
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$PGHOME/lib
EOF# 使环境变量生效source /etc/profile# 创建 systemd 服务单元文件cat <<EOF > /etc/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL database server
After=network.target[Service]
Type=forking
User=postgresql
Group=postgresql
Environment=PGPORT=5432
Environment=PGDATA=$data_dir_path
ExecStart=$install_path/bin/pg_ctl start -D \$PGDATA -l \$PGDATA/logfile
ExecStop=$install_path/bin/pg_ctl stop -D \$PGDATA -m fast
ExecReload=$install_path/bin/pg_ctl reload -D \$PGDATA
TimeoutSec=300[Install]
WantedBy=multi-user.target
EOF# 重新加载 systemd 配置systemctl daemon-reload# 询问用户是否设置开机自启动echo "是否设置 PostgreSQL 为开机自启动? (y/n)"read -r enable_answerif [[ "$enable_answer" == "y" ]]; then# 启用 PostgreSQL 服务systemctl enable postgresqlecho "PostgreSQL 已设置为开机自启动。"elseecho "PostgreSQL 未设置为开机自启动。"fi# 启动 PostgreSQL 服务systemctl start postgresqlecho "PostgreSQL 数据库安装并启动成功。"# 修改 postgresql.conf 文件modify_postgresql_conf "$data_dir_path"# 修改 pg_hba.conf 文件modify_pg_hba_conf "$data_dir_path"
}function modify_postgresql_conf {local data_dir_path=$1# 编辑 postgresql.conf 文件echo "正在修改 $data_dir_path/postgresql.conf 文件..."# 修改第60行 listen_addresses 的值为 '*'sed -i '60s/^#//; 60s/localhost/*/' "$data_dir_path/postgresql.conf"# 修改第64行 port 的值为 5432sed -i '64s/^#//' "$data_dir_path/postgresql.conf"echo "postgresql.conf 文件修改完成。"
}function modify_pg_hba_conf {local data_dir_path=$1# 编辑 pg_hba.conf 文件echo "正在修改 $data_dir_path/pg_hba.conf 文件..."# 在匹配行后添加新的配置行sed -i '/# IPv4 local connections:/ a \
host    all             all             0.0.0.0/0               md5' "$data_dir_path/pg_hba.conf"echo "pg_hba.conf 文件修改完成。"
}# 执行 PostgreSQL 安装
install_postgresql

问题

开机自启可提供选择,如果选择启用可能会报错,或者安装好后会报错,看一下之前创建的数据路径底下的logfile

在这里插入图片描述

5.nginx脚本化安装(离线)

使用方法

dos2unix nginx.sh
sh nginx.sh

代码

#!/bin/bash# 检查并创建目录
check_and_create_dir() {local dir=$1if [ ! -d "$dir" ]; thenread -p "目录 $dir 不存在,是否现在创建?(y/n): " choiceif [ "$choice" = "y" ]; thenmkdir -p "$dir"echo "目录 $dir 已创建"elseecho "跳过创建目录 $dir,这可能导致后续操作失败"exit 1fielseecho "目录 $dir 已存在,跳过创建"fi
}# 检查文件是否存在
check_file() {local file=$1if [ ! -f "$file" ]; thenecho "文件 $file 不存在,请下载后再运行此脚本"exit 1fi
}# 解压缩文件到指定目录
unzip_file() {local file=$1local dir=$2check_file "$file"unzip -o "$file" -d "$dir"echo "文件 $file 已解压缩到 $dir"
}# 解压 .tar.gz 文件到指定目录
untar_file() {local file=$1local dir=$2check_file "$file"tar -xvf "$file" -C "$dir"echo "文件 $file 已解压到 $dir"
}# 检查 RPM 包是否已安装,如果未安装且 RPM 文件存在,则安装
check_and_install_rpm() {local rpm_file=$1local package_name=$2if rpm -q "$package_name" > /dev/null; thenecho "包 $package_name 已安装,跳过"elseif [ -f "$rpm_file" ]; thenrpm -ivh "$rpm_file" --nodepsecho "RPM 包 $rpm_file 已安装"elseecho "RPM 包 $rpm_file 不存在,尝试使用 yum 安装"yum install -y "$package_name"if [ $? -ne 0 ]; thenecho "yum 安装 $package_name 失败,请手动安装"exit 1fififi
}# 获取用户指定的解压目录路径,默认为 /data/nginxzip
read -p "请输入文件解压目录(默认为 /data/nginxzip): " dir
dir=${dir:-/data/nginxzip}# 获取 nginx.zip 的具体路径,默认为 /data/nginx.zip
read -p "请指定 nginx.zip 的完整路径(例如:/data/nginx.zip): " nginx_zip_path
nginx_zip_path=${nginx_zip_path:-/data/nginx.zip}# 提示用户创建目录
echo "请确保以下目录已创建在您的系统中,否则脚本将自动为您创建它们:"
echo "$dir"# 暂停以允许用户手工创建目录
read -p "按 Enter 键继续或者退出脚本后手工创建... " -rs
echo# 检查并创建目录
check_and_create_dir "$dir"# 检查文件是否存在
check_file "$nginx_zip_path"# 解压 nginx.zip
unzip_file "$nginx_zip_path" "$dir"# 检查并解压其他文件
files=("nginx-1.20.2.tar.gz" "pcre-8.41.zip" "openssl-1.1.1j.tar.gz" "zlib-1.3.1.tar.gz")
for file in "${files[@]}"; docheck_file "$dir/$file"
doneunzip_file "$dir/pcre-8.41.zip" "$dir"
untar_file "$dir/nginx-1.20.2.tar.gz" "$dir"
untar_file "$dir/openssl-1.1.1j.tar.gz" "$dir"
untar_file "$dir/zlib-1.3.1.tar.gz" "$dir"# 安装所需的 RPM 包
rpms=("cpp-4.8.5-44.el7.x86_64.rpm gcc""gcc-4.8.5-44.el7.x86_64.rpm gcc""gcc-c++-4.8.5-36.el7.x86_64.rpm gcc-c++""glibc-2.17-317.el7.x86_64.rpm glibc""glibc-common-2.17-317.el7.x86_64.rpm glibc-common""glibc-devel-2.17-317.el7.x86_64.rpm glibc-devel""glibc-headers-2.17-317.el7.x86_64.rpm glibc-headers""libstdc++-devel-4.8.5-36.el7.x86_64.rpm libstdc++-devel"
)for rpm in "${rpms[@]}"; dorpm_file=$(echo "$rpm" | cut -d' ' -f1)package_name=$(echo "$rpm" | cut -d' ' -f2)check_and_install_rpm "$rpm_file" "$package_name"
doneecho "所有解压和依赖包安装已完成,开始编译和安装组件..."# 第一步:编译安装 OpenSSL
echo "编译安装 OpenSSL..."
cd "$dir/openssl-1.1.1j/"
./config
if [ $? -eq 0 ]; thenmakeif [ $? -eq 0 ]; thenmake installif [ $? -eq 0 ]; thenecho "OpenSSL 安装成功!"elseecho "OpenSSL make install 失败!"exit 1fielseecho "OpenSSL make 失败!"exit 1fi
elseecho "OpenSSL 配置失败!"exit 1
fi
cd -# 第二步:编译安装 pcre
echo "编译安装 pcre..."
cd "$dir/pcre-8.41/"
./configure
if [ $? -eq 0 ]; thenmakeif [ $? -eq 0 ]; thenmake installif [ $? -eq 0 ]; thenecho "pcre 安装成功!"elseecho "pcre make install 失败!"exit 1fielseecho "pcre make 失败!"exit 1fi
elseecho "pcre 配置失败!"exit 1
fi
cd -# 第三步:编译安装 zlib
echo "编译安装 zlib..."
cd "$dir/zlib-1.3.1/"
./configure
if [ $? -eq 0 ]; thenmakeif [ $? -eq 0 ]; thenmake installif [ $? -eq 0 ]; thenecho "zlib 安装成功!"elseecho "zlib make install 失败!"exit 1fielseecho "zlib make 失败!"exit 1fi
elseecho "zlib 配置失败!"exit 1
fi
cd -# 第四步:编译安装 Nginx
echo "编译安装 Nginx..."
cd "$dir/nginx-1.20.2/"
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-pcre=../pcre-8.41 --with-openssl=../openssl-1.1.1j --with-stream
if [ $? -eq 0 ]; thenmakeif [ $? -eq 0 ]; thenmake installif [ $? -eq 0 ]; thenecho "Nginx 安装成功!"elseecho "Nginx make install 失败!"exit 1fielseecho "Nginx make 失败!"exit 1fi
elseecho "Nginx 配置失败!"exit 1
fi
cd -# 复制 nginx 到 /usr/bin 目录
if [ -f "/usr/local/nginx/sbin/nginx" ]; thencp /usr/local/nginx/sbin/nginx /usr/bin/if [ $? -eq 0 ]; thenecho "nginx 已成功复制到 /usr/bin 目录"elseecho "复制 nginx 到 /usr/bin 目录失败"exit 1fi
elseecho "/usr/local/nginx/sbin/nginx 文件不存在,请检查 Nginx 是否正确安装"exit 1
fi# 检查 nginx 是否可执行
if [ -x "/usr/bin/nginx" ]; thenecho "nginx 在 /usr/bin 目录下已可用"
elseecho "nginx 在 /usr/bin 目录下不可执行,请检查文件权限"exit 1
fi# 修改 nginx.conf 文件中的端口号
echo "修改 nginx.conf 文件中的端口号..."
sed -i '36s/listen       80;/listen       8088;/' /usr/local/nginx/conf/nginx.conf# 验证修改是否成功
if grep -q "listen       8088;" /usr/local/nginx/conf/nginx.conf; thenecho "nginx.conf 文件中的端口号已成功修改为 8088"
elseecho "nginx.conf 文件中的端口号修改失败,请手动检查文件"exit 1
fi# 定义 Nginx 服务文件内容
nginx_service_content='[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target'# 创建 Nginx 服务文件
echo "创建 Nginx 服务文件 /etc/systemd/system/nginx.service"
echo "$nginx_service_content" | sudo tee /etc/systemd/system/nginx.service > /dev/nullif [ $? -ne 0 ]; thenecho "创建 Nginx 服务文件失败!"exit 1
fi# 重新加载 systemd 配置
echo "重新加载 systemd 配置"
sudo systemctl daemon-reloadif [ $? -ne 0 ]; thenecho "重新加载 systemd 配置失败!"exit 1
fi# 启用 Nginx 服务
echo "启用 Nginx 服务"
sudo systemctl enable nginxif [ $? -ne 0 ]; thenecho "启用 Nginx 服务失败!"exit 1
fi# 启动 Nginx 服务
echo "启动 Nginx 服务"
sudo systemctl start nginxif [ $? -ne 0 ]; thenecho "启动 Nginx 服务失败!"exit 1
fi# 检查 Nginx 服务状态
echo "检查 Nginx 服务状态"
sudo systemctl status nginxif [ $? -ne 0 ]; thenecho "检查 Nginx 服务状态失败!"exit 1
fiecho "所有操作已完成!"

在这里插入图片描述


总结

脚本就是无脑话和不动手安装,本文不存在抄袭,都是自己平时觉得步骤繁琐,根据经验写的,可能有不足大家多多包涵,后续会更新k8s脚本化安装。我已经把脚本上传到资源(脚本.zip)

相关文章:

脚本化挂在物理盘、nfs、yum、pg数据库、nginx(已上传脚本)

文章目录 前言一、什么是脚本化安装二、使用步骤1.物理磁盘脚本挂载&#xff08;离线&#xff09;2.yum脚本化安装&#xff08;离线&#xff09;3.nfs脚本化安装&#xff08;离线&#xff09;4.pg数据库脚本化安装&#xff08;离线&#xff09;5.nginx脚本化安装&#xff08;离…...

ESP嵌入式开发环境安装

前期准备&#xff0c;虚拟机&#xff0c;ios镜像&#xff0c;VSCode。 centOS8&#xff1a;centos安装包下载_开源镜像站-阿里云 虚拟机&#xff1a;vmware VSCode&#xff1a;Visual Studio Code - Code Editing. Redefined 如何安装镜像自行查找 完成以上环境后进行一下操…...

Elasticsearch入门学习

Elasticsearch是什么 Elasticsearch 是一个基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展的数据存储和矢量数据库。 它针对生产规模工作负载的速度和相关性进行了优化。 使用 Elasticsearch 近乎实时地搜索、索引、存储和分析各种形状和大小的数据。 特点 分布式&a…...

黑马linux笔记(03)在Linux上部署各类软件 MySQL5.7/8.0 Tomcat(JDK) Nginx RabbitMQ

文章目录 实战章节&#xff1a;在Linux上部署各类软件tar -zxvf各个选项的含义 为什么学习各类软件在Linux上的部署 一 MySQL数据库管理系统安装部署【简单】MySQL5.7版本在CentOS系统安装MySQL8.0版本在CentOS系统安装MySQL5.7版本在Ubuntu&#xff08;WSL环境&#xff09;系统…...

《软硬协同优化,解锁鸿蒙系统AI应用性能新高度》

在当今数字化时代&#xff0c;鸿蒙系统与人工智能的融合正逐渐成为科技领域的热门话题。如何通过软件和硬件协同优化&#xff0c;进一步提升鸿蒙系统中AI应用的整体性能&#xff0c;成为了开发者和技术爱好者们关注的焦点。 鸿蒙系统与AI应用的融合现状 鸿蒙系统以其独特的微…...

利用 Tree Shaking 提升 React.js 性能

Tree Shaking 是现代 JavaScript 应用中不可或缺的优化技术&#xff0c;它通过移除未使用的代码来减少最终打包的大小。对于 React.js 应用&#xff0c;这一技术尤为重要&#xff0c;因为随着组件和第三方库的增多&#xff0c;打包体积可能迅速膨胀。Tree Shaking 能显著提升加…...

RPC实现原理,怎么跟调用本地一样

回答1 要让⽹络通信细节对使⽤者透明&#xff0c;我们需要对通信细节进⾏封装&#xff0c;我们先看下⼀个 RPC 调⽤的流程涉及到哪些通 信细节&#xff1a; 1. 服务消费⽅&#xff08; client &#xff09;调⽤以本地调⽤⽅式调⽤服务&#xff1b; 2. client stub 接收到调…...

Vue进阶之AI智能助手项目(二)——ChatGPT的调用和开发

AI智能助手项目 service服务端文件目录src目录详解src/index.tschatGPT:src/chatgpt/index.ts前端接口部分src/api/index.tssrc/utils/request/index.tspost方法httpHttpOptionsrc/utils/request/axios.tsLayout布局页面-viewsexception异常页面src/views/exception/404/index…...

python学opencv|读取图像(二十九)使用cv2.getRotationMatrix2D()函数旋转缩放图像

【1】引言 前序已经学习了如何平移图像&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;二十七&#xff09;使用cv2.warpAffine&#xff08;&#xff09;函数平移图像-CSDN博客 在此基础上&#xff0c;我们尝试旋转图像的同时缩放图像。 【2】…...

2025-微服务—SpringCloud-1~3

2025-微服务—SpringCloud 第一章、从Boot和Cloud版本选型开始说起1、Springboot版本2、Springcloud版本3、Springcloud Alibaba4、本次讲解定稿版 第二章 关于Cloud各种组件的停更/升级/替换1、微服务介绍2、SpringCloud是什么&#xff1f;能干吗&#xff1f;产生背景&#xf…...

UnityXR Interaction Toolkit 如何检测HandGestures

前言 随着VR设备的不断发展,从最初的手柄操作,逐渐演变出了手部交互,即头显可以直接识别玩家的手部动作,来完成手柄的交互功能。我们今天就来介绍下如何使用Unity的XR Interaction Toolkit 来检测手势Hand Gesture。 环境配置 1.使用Unity 2021或者更高版本,创建一个项…...

使用 Multer 上传图片到阿里云 OSS

文件上传到哪里更好&#xff1f; 上传到服务器本地 上传到服务器本地&#xff0c;这种方法在现今商业项目中&#xff0c;几乎已经见不到了。因为服务器带宽&#xff0c;磁盘 IO 都是非常有限的。将文件上传和读取放在自己服务器上&#xff0c;并不是明智的选择。 上传到云储存…...

2008-2020年各省社会消费品零售总额数据

2008-2020年各省社会消费品零售总额数据 1、时间&#xff1a;2008-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区、年份、社会消费品零售总额 4、范围&#xff1a;31省 5、指标解释&#xff1a;社会消费品零售总额指企业&#x…...

【大模型入门指南 07】量化技术浅析

【大模型入门指南】系列文章&#xff1a; 【大模型入门指南 01】深度学习入门【大模型入门指南 02】LLM大模型基础知识【大模型入门指南 03】提示词工程【大模型入门指南 04】Transformer结构【大模型入门指南 05】LLM技术选型【大模型入门指南 06】LLM数据预处理【大模型入门…...

java 查询树结构数据,无限层级树结构通用方法

1、数据库表数据 2、controller层TestTree简单测试 RestController RequestMapping("/test") public class testTreeController {Autowiredprivate TestTreeService testTreeService;GetMapping("/list")public List<TestTree> List(TestTree tree)…...

FreeCAD集成gmsh源码分析

目录 gmsh模块界面获取gmsh的版本执行gmsh网格划分gmsh模块界面 这个界面是用PySide来写的,PySide是QT的python绑定,具体代码在task_mesh_gmsh.py文件中。目前这个界面非常的简陋,没有对接gmsh稍微高级一点的功能。界面对应的事件处理是在gmshtools.py中。这里只分析“Gmsh …...

K8s 集群 IP 地址管理指南(K8s Cluster IP Address Management Guide)

K8s 集群 IP 地址管理指南 概述 你是否在小型初创公司或大型企业工作&#xff0c;并正在为公司评估 Kubernetes&#xff1f;你可能正在考虑运行十几个或更多的 Kubernetes (K8s) 集群。你期望每个集群支持几百个 K8s 节点&#xff0c;每个节点可能有 50 到 100 个 K8s Pod。这…...

Debye-Einstein-模型拟合比热容Python脚本

固体比热模型中的德拜模型和爱因斯坦模型是固体物理学中用于估算固体热容的两种重要原子振动模型。 爱因斯坦模型基于三种假设&#xff1a;1.晶格中的每一个原子都是三维量子谐振子&#xff1b;2.原子不互相作用&#xff1b;3.所有的原子都以相同的频率振动&#xff08;与德拜…...

OpenCV的图像分割

1、基本概念 图像分割是计算机视觉和图像处理中的一个关键步骤&#xff0c;它指的是将图像划分为多个区域或对象的过程。这些区域或对象在某种特性&#xff08;如颜色、形状、纹理或亮度等&#xff09;上是一致的或相似的&#xff0c;而在不同区域之间则存在明显的差异。图像分…...

【源码+文档+调试讲解】农产品研究报告管理系统

摘 要 农产品研究报告管理系统是一个旨在收集、整理、存储和分析农产品相关研究数据的综合性平台。农产品研究报告管理系统通常包含一个强大的数据库&#xff0c;它能够处理大量的研究数据&#xff0c;并对这些数据进行有效的管理和备份。农产品研究报告管理系统是现代农业科学…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...