shell脚本---实现tomcat部署包自动打包并下载到本地

tomcat8.5+jdk1.8安装、tomcat服务的shell脚本和service管理方式 drwxr-x--- 2 root root 4096 Aug 3 15:57 bin #tomcat的各种管理脚本[root@localhost bin]# ll #.bat用于windows,.sh用于Linuxtotal 872-rwxr-x--- 1 root root 25294 Aug 10 2021 catalina.sh #真正用于启动tomcat,可以在里面设置各种参数。 阅读详情

项目需求:现场tomcat业务系统部署手动打包,业务系统比较多,国内批量备份并打包给到现场进行升级操作
shell脚本代码如下:
功能实现:自动打包,可以选择是否下载到本地,但是需要手动输入路径

#! /bin/bash
source /etc/profile    #加载系统环境变量
source ~/.bash_profile  #加载用户环境变量
set -o nounset       #引用未初始化变量时退出
set -o errexit      #执行shell命令遇到错误时退出
date_tar=$(date +%Y-%m-%d_%H-%M-%S)
date=$(date +%Y-%m-%d)
package_path=/opt/pe_to_agl/$date
package_version="V4.5"

if [ ! -e $package_path ];then
  mkdir -p $package_path
fi

read -ep "请输入备份业务系统的路径: " choose_path
if [ ! -d ${choose_path} ];then
	echo "请输入正确路径,已退出"
	exit
else
echo "以下为检测到的业务系统:"
cd ${choose_path}
for dir in $(ls ${choose_path})
do
    [ -d ${dir} ] && echo ${dir} #先判断是否是目录,然后再输出
done

cd ${choose_path}
read -ep "请输入要备份的业务系统: " choose_name
function action_size(){
        mv ${choose_name}_${date_tar}_${package_version}.tar.gz $package_path
        cd $package_path
        size=$(du $package_path/${choose_name}_${date_tar}_${package_version}.tar.gz -sh | awk '{print $1}')
        echo "系统${choose_name} 压缩完成,大小${size},查看路径 $package_path"
}

function tar_packages(){
	cd ${choose_path}/${choose_name}
	if [ ! -d "webapps" ];then
                echo "$choose_path/${choose_name}下没有webapps文件夹,不符合Tomact备份格式,请确认后再试,已退出!"
                exit
	else
               echo "开始压缩文件"     
               cd ${choose_path}/${choose_name}/webapps
		if [ -d "ROOT" ];then
               		tar zcpvf ${choose_name}_${date_tar}_${package_version}.tar.gz ROOT
	       		action_size
		elif [ -d "cas" ];then
               		tar zcpvf ${choose_name}_${date_tar}_${package_version}.tar.gz cas
               		action_size
		elif [ -d "xxl-job-admin" ];then
                        tar zcpvf ${choose_name}_${date_tar}_${package_version}.tar.gz xxl-job-admin xxl-job-k007-executor-01
                        action_size
		fi
	fi
}

if test `$choose_name` == `${dir}`;then
	tar_packages
else 
       echo " 对不起,此路径不存在你输入的业务系统,即将退出!"
       exit

fi
echo "########################################################################"
echo "########################################################################"

read -ep "是否下载文件到本地?(y/n)" judge
if [ $judge = 'y' -o $judge = 'Y' ];then

usage() {
echo "$0 [base|workFlowEngine|settings|access|order|risk]"
}

usage

if [ $# -eq 1 ];then
path=$1

tar=`find ${package_path}/*${path}* -name "*.tar.gz" -type f`
echo "============开始下载tar.gz文件 $tar ============"
sz -b $tar

else
echo "==============开始下载 $package_path 下所有tar.gz文件=============="
for tar in $(find ${package_path}/ -name "*.tar.gz" -type f); do sz -b $tar;done
fi
echo "==============下载成功,请到本地目录自行查看==================="
else
  exit
fi
fi

附上前端web的打包脚本:

#! /bin/bash
source /etc/profile    #加载系统环境变量
source ~/.bash_profile  #加载用户环境变量
set -o nounset       #引用未初始化变量时退出
set -o errexit      #执行shell命令遇到错误时退出
date_tar=$(date +%Y-%m-%d_%H-%M-%S)
date=$(date +%Y-%m-%d)
package_path=/opt/pe_to_agl_web/$date
package_version="V4.5"

if [ ! -e $package_path ];then
  mkdir -p $package_path
fi

read -p "请输入备份业务系统的路径: " choose_path
if [ ! -d ${choose_path} ];then
	echo "请输入正确路径,已退出"
	exit
else
echo "以下为检测到的业务系统:"
cd ${choose_path}
for dir in $(ls ${choose_path})
do
    [ -d ${dir} ] && echo ${dir} #先判断是否是目录,然后再输出
done

cd ${choose_path}
read -p "请输入要备份的业务系统: " choose_name
function action_size(){
        mv ${choose_name}_${date_tar}_${package_version}.tar.gz $package_path
        cd $package_path
        size=$(du $package_path/${choose_name}_${date_tar}_${package_version}.tar.gz -sh | awk '{print $1}')
        echo "系统${choose_name} 压缩完成,大小${size},查看路径 $package_path"
}

if [ "${choose_name}" != ${dir} ];then

	cd ${choose_path}/${choose_name}
	if [ ! -d "dist" ];then
                echo "$choose_path/${choose_name}下没有webapps文件夹,不符合Tomact备份格式,请确认后再试,已退出!"
                exit
	else
               echo "开始压缩文件"     
               		tar zcpvf ${choose_name}_${date_tar}_${package_version}.tar.gz dist
	       		action_size
	fi
else
       echo " 对不起,此路径不存在你输入的业务系统,即将退出!"
       exit

fi
echo "########################################################################"
echo "########################################################################"

read -p "是否下载文件到本地?(y/n)" judge
if [ $judge = 'y' -o $judge = 'Y' ];then

usage() {
echo "$0 [base|workFlowEngine|settings|access|order|risk]"
}

usage

if [ $# -eq 1 ];then
path=$1

tar=`find ${package_path}/*${path}* -name "*.tar.gz" -type f`
echo "============开始下载tar.gz文件 $tar ============"
sz -b $tar

else
echo "==============开始下载 $package_path 下所有tar.gz文件=============="
for tar in $(find ${package_path}/ -name "*.tar.gz" -type f); do sz -b $tar;done
fi
echo "==============下载成功,请到本地目录自行查看==================="
else
  exit
fi
fi

附上更新后的前端脚本:【娇羞版本】
更新内容:
可以全部打包,也可以单独打包;
可以全部下载,也可以单独下载;
交互性更加完善

#! /bin/bash
###############################################我是分界线哦################################################################
###############################################开始加载了哦################################################################
source /etc/profile    #加载系统环境变量
source ~/.bash_profile  #加载用户环境变量
#set -o nounset       #引用未初始化变量时退出
#set -o errexit      #执行shell命令遇到错误时退出
###############################################下面是定义变量区了哦#########################################################
#定义打包的日期
date_tar=$(date +%Y-%m-%d_%H-%M-%S)
#定义日期
date=$(date +%Y-%m-%d)
#定义版本号
package_version="V4.5"
#定义备份路径
package_path=/opt/pe_to_agl_web/${date}_${package_version}

###############################################下面是定义函数区了哦#########################################################
#定义输入Ctrl+c不能退出的函数
#trap 'onCtrlc' INT
function onCtrlc(){
        echo "输入"quit"/"exit"才能离开我哦,你就这么忍心嘛~"
}
#准备工作的函数
function init(){
if [ ! -e $package_path ];then
  mkdir -p $package_path
fi
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
echo ">>>百因必有果!你的报应就是我!我来啦!哈哈哈!!!"
while true; do
read -ep ">>>快告诉我你的愿望吧,想要备份的路径是啥!" choose_path
[ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
if [ ! -d ${choose_path} ];then
  echo ">>>这不是一个正确路径呢,你这个骗子,好好想想再告诉我!<<<"
  continue
elif [[ -z "${choose_path}" ]]; then
  echo ">>>你啥都没告诉我啊,让我怎么干活!快点儿再输入一次吧!<<<"
  continue
else
  echo ">>>下面是人家为你找到的业务系统哦!<<<"
  echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
#遍历目录列表并打印
cd ${choose_path}
for dir in $(ls ${choose_path})
do
    [ -d ${dir} ] && echo ${dir} && echo ${dir} >> ${choose_path}/list.txt #先判断是否是目录,然后再输出
done
break
fi
done 
}
#定义全部下载到本地的函数
function all_download(){
echo "########################################################################"
echo "########################################################################"
echo ">>>人家发现有下面这么多可下载的前端压缩文件呢!快夸我吧!<<<"
#遍历文件并打印
cd ${package_path}
for file in $(ls ${package_path})
do
    [ -f ${file} ] && echo ${file} #先判断是否是文件,然后再输出
done

read -ep ">>>我就插一句!你是否要全部下载文件到本地呢?(y/n)" all_down
if [ $all_down = 'y' -o $all_down = 'Y' ];then
all_tar=`find ${package_path}/ -name "*.tar.gz" -type f`
echo "##################开始下载 $package_path 下所有tar.gz文件了哦#####################"
for tr in $all_tar; 
  do 
  echo "==============开始下载 $tr文件了哦=============="
  sz -b $tr
  if [[ $? == 0 ]];then
    echo "==============$tr系统下载完成了呢,请回到本地目录仔细查看哦===================" 
fi 
done
#判断是否下载完成
if [[ $? == 0 ]];then
    echo "#################恭喜呀!系统全部下载完成了呢,请回到本地目录仔细查看哦######################" 
fi 
else
#判断备份路径下是否存在列表文件,有的话删除
  [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
  exit
fi
}
#定义所有文件打包的函数
function all_action_size(){
cd ${choose_path}
cat_list=`cat ${choose_path}/list.txt` 
#遍历list中的文件列表,并进行打包
        for sys in ${cat_list};do
                sleep 2
                #判断目录下是否存在dist文件夹
                cd ${choose_path}/${sys}
                if [ ! -d "dist" ];then
                echo ">>>人家在$choose_path/${sys}下没有dist文件夹呢,是不是你记错了呢?请确认后再来找我吧!我好累,要休息了哦"
                exit
                else
                echo ">>>开始压缩文件了哦"     
                tar zcpvf ${sys}.tar.gz dist
                mv ${sys}.tar.gz $package_path
                cd $package_path
                size=$(du $package_path/${sys}.tar.gz -sh | awk '{print $1}')
                  if [[ $? == 0 ]];then
                        echo ">>>系统${sys} 压缩完成了呢,大小${size},路径 $package_path下可以查看信息哦!" 
                  fi            
                fi               
        done
        all_download
}
#定义单独下载某个文件的函数
function single_download(){
read -ep "是否将${single}-web下载到本地呢?(y/n) " single_down
if [ $single_down = 'y' -o $single_down = 'Y' ];then
single_tar=`find ${package_path}/ -name "${single}-web.tar.gz" -type f`
echo "============开始下载tar.gz文件 $single_tar 喽!============"
sz -b $single_tar
if [[ $? == 0 ]];then
    echo "==============系统${single}-web 下载完成了呢,请回到本地目录仔细查看吧!===================" 
    echo "短暂的相遇就这样匆匆而过!"
fi 
else
  echo "短暂的相遇就这样匆匆而过!" 
fi
}
#定义单独打包某个文件夹的函数
function single_action_size(){
cat_single_list=`cat ${choose_path}/single_list.txt`
while true; 
do
#判断要打包的文件夹是否在列表中
if [ `grep -c "${single}-web" ${choose_path}/list.txt` -ne '0' ];then
for sg in ${cat_single_list};do
#判断路径下是否存在dist文件夹
  if [ ! -d "${choose_path}/${sg}/dist" ];then
                echo ">>>人家在$choose_path/${sg}下没有发现dist文件夹呢,是不是你记错了呢?请确认后重新告诉我吧<<<"
                continue
		break
  else
                echo ">>>开始压缩文件喽!<<<" 
                cd ${choose_path}/${sg}    
                tar zcpvf ${sg}.tar.gz dist
                mv ${sg}.tar.gz $package_path
                cd $package_path
                size=$(du $package_path/${sg}.tar.gz -sh | awk '{print $1}')  
                  if [[ $? == 0 ]];then
                        echo ">>>系统${sg} 压缩完成了呢,大小${size},路径 $package_path 下可以查看信息哦!<<<" 
                  fi                                             
  fi
done
single_download
break
else
       echo ">>>不好意思呢,人家在这个路径下没找到你输入的业务系统呀!<<<"
       break

fi
done
}
###############################################下面是工作区了哦#########################################################
#调用准备工作的函数
init
#定义退出变量,直到用户输入的字符串是quit时,until循环才会退出
QUIT_COMMAND=quit
#until [ "${USER_INPUT}" = "${QUIT_COMMAND}" ]
while true;
do
   echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
   echo ">>>人家还是个宝宝,记得输入正确的字符哦!不然我不懂呢"
   echo "(温馨提示:输入 "quit"/"exit" 退出程序)"
   #调用输入Ctrl+c不能退出的函数
   trap 'onCtrlc' INT
   read -ep ">>>现在有两种选择:全部备份(A/a),单个备份(B/b),告诉我你的选择吧!" USER_INPUT
   echo
   echo ">>您选择的是 $USER_INPUT呢!"
   #对用户的输入进行匹配
   case $USER_INPUT in
       "A" | "a")
               echo ">>>正在备份路径下所有的web系统呦~请耐心等待哦~"
               #调用全部打包的函数
               all_action_size
               echo ">>>恭喜!web系统已全部备份完成了! 轻轻的我走了,正如我轻轻地来~Byebye~"
               [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
               exit
               ;;
       "B" | "b")
              while true; do
               echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
               read -ep ">>>请输入想要备份的web系统名称,只用前缀就可以了哦~:" single
               #判断输入是否为空
               if [[ -z "${single}" ]]; then
                  echo ">>>你啥都没告诉我啊,让我怎么干活!请再输入一次!<<<"
                  continue
               else
                #清空之前的单独打包的列表,并打印
               cat /dev/null > ${choose_path}/single_list.txt && echo ${single}-web >> ${choose_path}/single_list.txt
               echo ">>>正在备份${single}-web呦~请耐心等待哦~"
               #调用单独打包的函数
               single_action_size 
               #输入quit才能退出            
               until [ "${USER_INPUT}" = "${QUIT_COMMAND}" ]
#                while true;
                do
                  #判断是否打包完成
                  if [[ $? == 0 ]];then
                        read -ep ">>>恭喜!${single}-web 已备份完成了呢!是否陪我继续呢?(y/n):" single2
                  else
                  read -ep ">>>是否陪我继续呢?(y/n):" single2
                  echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
                  fi
                 case $single2 in
                   "Y" | "y" )
                        echo ">>>嘻嘻,我又回来了呦,就知道你想我呢!"
                        echo ">>>开始干活喽!以下是人家为您检测到的业务系统哦,快夸我吧!<<<"
                        echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
                         cat ${choose_path}/list.txt 
                        break 
                        ;; 
                   "N" | "n")
                        [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
                        echo ">>>说好的爱我一辈子呢!你这个骗子!哼!不理你了!我走了!!!"
                        echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
                        exit 
                             
                        ;;
                    *)
                    echo ">>>能不能认真点儿!不是说了我还小嘛,太复杂的我不懂哦~看你这么诚恳,再给你次机会吧:"
                    ;;
                 esac
               done
               break
               fi
             done
               ;;
        "quit" | "exit")
                  break
                  ;;

        *)
        echo ">>>能不能认真点儿!不是说了我还小嘛,太复杂的我不懂哦~看你这么诚恳,再给你次机会吧:"
               ;;
   esac
   echo
   done
   echo ">>>百因必有果,你的报应就是我,记得爱我,么么哒~"
   [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
   exit 0

###############################################下面是注释区了哦#########################################################
###############################################都是改版前用到的#########################################################

#QUIT_COMMAND=quit
##直到用户输入的字符串是quit时,until循环才会退出
#until [ "$USER_INPUT" = "$QUIT_COMMAND" ]
#do
#   echo "Please input command"
#   echo "(type command $QUIT_COMMAND to exit)"
#   read USER_INPUT
#   echo
#   echo ">>your command is $USER_INPUT"
#
#   #对用户的输入进行匹配
#   case $USER_INPUT in
#       "open")
#               echo ">>opening..."
#               ;;
#       "close")
#               echo ">>closed"
#               ;;
#        *)
#               echo ">>Unknown command"
#               ;;
#   esac
#   echo
#   done
#   echo "Bye."
#   exit 0

#init
#read -ep "请选择:全部备份(A/a),单个备份(B/b):" choose
#        if [ $choose = 'A' -o $choose = 'a' ];then
#        echo "正在备份路径下所有web系统,请稍后..."
#       all_action_size
#       echo "恭喜!web系统已全部备份完成!"
#        [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
#       elif [ $choose = 'B' -o $choose = 'b' ];then
#       read -ep "请输入想要备份的web系统名称:" single
#             cat /dev/null > ${choose_path}/single_list.txt && echo $single >> ${choose_path}/single_list.txt
#             echo "正在备份$single 请稍后..."
#             single_action_size
#             echo "恭喜!$single 已备份完成!"
#             [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
#              exit  
#       else 
#       echo "您输入的字符不符合规则,不理你了..."
#        [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
#       exit
#       fi  


###############################################我是分界线哦#########################################################

SpringBoot应用分离打包实战:告别Fat Jar,提升部署效率与资源管理 在Java应用部署中,依赖管理和部署效率是常见的工程挑战。SpringBoot的Fat Jar打包机制虽然简化了开发,但在生产环境频繁部署时,会导致构建产物臃肿、传输缓慢。通过理解JarLauncher类加载机制和Maven插件原理,可以实现应用代码、第三方依赖和配置文件的物理分离。这种分离打包技术能显著优化CI/CD流程,减少网络传输时间,并在多服务部署场景下实现依赖共享,有效解决磁盘空间浪费问题。对于需要频繁更新业务逻辑的微服务架构,分离部署提供了更灵活的运维方式,同时为容器化镜像的分层构建奠定基础。本 阅读详情

相关推荐

Windows一键部署AI工作流:OpenClaw虾壳云版实战指南

AI模型服务化部署是将算法能力转化为业务价值的关键环节,其核心在于降低工程门槛、保障本地化稳定性与提升交付效率。基于Docker和WSL2的轻量级编排方案,正成为中小团队替代Kubernetes的主流选择——尤其在Windows 10/11占主导的国内研发环境中,路径兼容性、防火墙策略、GPU自动适配等细节直接决定落地成败。OpenClaw虾壳云版通过预打包镜像、PowerShell智能校验、端口冲突自愈及YOLOv8模型热替换等机制,实现了从双击到可用的92秒闭环。本文聚焦真实场景下的开箱即用实践,覆盖部

weixin_34082789的博客 443

Linux下用shell脚本安装tomcat

提醒 需要下载apache-tomcat-7.0.69.tar.gz并和脚本放在同一目录下 #!/bin/bash #为了脚本可以重复执行,如果已经安装过,就删除 ${TOMCAT_HOME}/bin/shutdown.sh &amp;&gt; /dev/null if [ -d /usr/apache-tomcat-7.0.69 ] then         rm -rf /usr/apa...

熊 923

DolphinScheduler入门实战:从零部署到工作流编排与运维指南

任务调度是数据工程与自动化运维的核心基础组件,其核心原理在于将分散、脆弱的定时任务通过有向无环图(DAG)模型进行编排,转化为集中、可靠、可视化的自动化工作流。这项技术通过定义任务间的依赖关系、执行策略和资源隔离,实现了数据处理流程的自动化与高效管理,其技术价值在于显著降低运维成本、提升任务可靠性与开发效率。在数据仓库ETL、机器学习流水线、报表系统等场景中,一个稳定易用的调度平台是数据基础设施的关键支柱。本文聚焦于Apache顶级开源项目DolphinScheduler,深入讲解其Standalone模式

weixin_33691700的博客 488

shell 脚本安装Tomcat和java

脚本安装Tomcat和java#!/bin/bash##SCRIPT:install_jdk-8u181-linux-x64_apache-tomcat-8.0.53#AUTHOR:Shinyinfo#DATE:2018-9-27#REV:1.0.0#Description:install jdk1.8.0_181 apache-tomcat-8.0.53 for linux#Enviroment...

weixin_34244102的博客 213

悬剑5渗透测试平台:从Docker部署到实战内网攻防全解析

在网络安全领域,渗透测试是评估系统安全性的核心方法,而自动化工具集成与高效环境部署是其工程实践的基础。Docker容器化技术通过封装应用及其依赖,实现了环境的快速构建与一致性部署,从根本上解决了传统渗透测试中工具安装繁琐、版本冲突等痛点。这一技术价值在于极大提升了安全测试的效率和可重复性,广泛应用于红蓝对抗、漏洞评估和安全研究等场景。悬剑5作为基于Docker的集成化渗透测试平台,正是这一理念的杰出实践。它深度融合了信息搜集、漏洞扫描、密码破解和后渗透等全流程工具链,通过模块化设计实现了开箱即用。平台集成了

cmff98425的博客 455

Confluence+PostgreSQL Docker Compose一键部署实战

Confluence作为企业级知识管理平台,其稳定运行高度依赖与数据库(如PostgreSQL)的可靠集成。理解JDBC连接原理、容器网络服务发现机制及声明式配置(如docker-compose.yml中的healthcheck、restart策略)是解决‘数据库连不上’等高频问题的核心。Docker Compose通过基础设施即代码(IaC)方式解耦应用与环境,实现跨Ubuntu/CentOS/macOS的可复现部署,并天然支持离线场景与生产加固(HTTPS反代、自动化备份)。本文聚焦Confluence

weixin_30824599的博客 411

Shell脚本入门学习

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

大圣你在哪 2366

从HTTP协议到认证绕过:深度剖析JBoss CVE-2010-0738漏洞利用链

HTTP协议定义了多种请求方法,其中HEAD方法用于获取资源元信息而不返回消息体。在Web应用安全中,认证与授权机制需要对所有HTTP方法进行一致性校验,否则可能产生逻辑漏洞。这种因协议处理不一致导致的安全问题,在中间件和框架的历史版本中尤为典型,其技术价值在于揭示了安全设计需覆盖协议全貌的重要性。CVE-2010-0738正是JBoss AS 4.x中因安全约束未涵盖HEAD方法,导致JMX控制台认证被绕过的经典案例。攻击者利用此漏洞,结合JMX的MBean部署功能,可实现从认证绕过到远程代码执行的完整攻

weixin_30770783的博客 488

Linux系列-tomcat下载安装

并将压缩包通过xftp传入linux /usr/soft (个人习惯在usr包下创建soft文件夹用来存放各种安装包) 也可直接传到/usr/local。firewall-cmd --zone=public --add-port=7777/tcp --permanent 开放7777端口。例如 tar -zxvf /usr/soft/apache-tomcat-8.5.87.tar.gz -C /usr/local/firewall-cmd --reload 重启防火墙。进入tomcat/bin目录。

qq_45863248的博客 558

Git worktree实战:告别频繁切换分支,提升并行开发效率

Git worktree 是 Git 内置的多工作树机制,允许单仓库并行检出多个分支,从根本上解决上下文切换开销与协作中断问题。其原理在于共享对象库与引用,隔离工作目录与暂存区,既避免克隆仓库的磁盘浪费,又规避多终端 checkout 的状态污染。技术价值体现在零成本集成、低学习门槛和高 IDE 兼容性;典型应用场景包括代码评审、紧急热修复、AI 辅助并行开发及历史版本复现。本文聚焦 Git worktree 的工程化落地,涵盖创建、管理、IDE 集成与避坑实践,助力开发者将每日分支切换耗时从 15 分钟压

weixin_30455023的博客 526

Apache Axis VE-2019-0227漏洞深度剖析:从原理到实战修复

在Java Web服务开发中,SOAP协议与XML反序列化是构建分布式系统的核心技术。其原理在于将网络传输的XML格式SOAP消息转换为服务端可处理的Java对象,这一过程极大地方便了异构系统间的数据交换。然而,当框架在处理XML的灵活性特性(如<xsd:any>元素)时存在缺陷,反序列化机制可能成为严重的安全漏洞,允许攻击者注入并执行恶意代码,技术价值在于揭示了底层框架机制与安全边界的紧密关联。这一风险在Apache Axis这样的老旧但广泛使用的Web服务框架中尤为突出,其CVE-2019-0227漏洞

weixin_30570101的博客 464

linux多台服务器部署脚本,linux服务器批量部署应用系统shell脚本(Tomcat/jetty)

linux服务器批量部署应用系统shell脚本:1.请更换代码内的服务器地址(Tomcat或jetty服务器)serverRoot=/home/undoner/java_tool/apache-tomcat-7.0.61serverDir=/home/undoner/java_tool/apache-tomcat-7.0.61/webapps2.请更换工程所属配置文件名称/WEB-INF/clas...

weixin_32518073的博客 923

django drf 框架知识点(一)——serializer序列化器_用法全解

【django drf】序列化器:别名设置,全部参数序列化,自定义字段,只读只写,部分更新

qq_59344127的博客 1339

jenkins 部署和使用

jenkis 下载地址: http://updates.jenkins-ci.org/download/war/ 下载下来后是一个war包,部署到tomcat下,启动tomcat tomcat启动完成后,注册用户; 用注册的用户进行登录; 登陆完成后到【系统管理】–【插件管理】中安装maven和deploy的插件 分别是: Maven Invoker plugin 和 Deploy

ChanYee的博客 677

从XSA到Linux应用:Petalinux与Vitis的嵌入式开发全流程解析

本文详细解析了从XSA文件到Linux应用的嵌入式开发全流程,重点介绍了Petalinux与Vitis工具链的使用技巧和实战经验。通过XSA硬件描述、Petalinux工程搭建、系统镜像优化及Vitis开发配置等关键步骤,帮助开发者高效完成ZYNQ平台开发,解决常见问题并提升开发效率。

weixin_29195217的博客 192

STM32H743IIT6+USB3300高速HID通讯实战:从CUBEMX配置到调试避坑全记录

本文详细记录了基于STM32H743IIT6微控制器与USB3300 PHY芯片实现高速USB HID通信的完整实战过程。内容涵盖从硬件选型、STM32CubeMX工程配置(重点规避引脚映射等常见陷阱)、自定义报告描述符编写,到驱动层数据收发实现与高级调试技巧的全链路解析,旨在帮助开发者快速构建稳定、高效的嵌入式高速数据通道。

vscode5coder的博客 365

Docker安装Jenkins实现项目自动部署(Java Web项目)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34092455的博客 3042

<202505高项>《【VIP合集】 软考高项(第四版)十大知识域、五大过程组、ITTO输入输出工具、项目绩效域》

软考高项(第四版)十大知识域、五大过程组、ITTO输入输出工具、项目绩效域

Else 的博客 1857

Unity WebGL部署Tomcat避坑指南:解决.gz文件解析错误

在Web应用部署中,静态资源的高效传输是关键环节,Gzip压缩技术通过减少文件体积显著提升加载速度。其原理是在服务器端对文本资源进行压缩,浏览器接收后根据Content-Encoding头信息自动解压。这项技术对提升用户体验和降低带宽成本具有重要价值,广泛应用于游戏、Web应用等场景。然而,当使用Unity引擎开发WebGL应用并部署到Tomcat服务器时,由于Tomcat默认配置未正确识别.gz压缩文件的MIME类型和编码头,常导致浏览器解析失败,出现白屏或控制台报错。本文聚焦这一典型部署问题,深入剖析U

weixin_30564901的博客 398

2026.5.3:Ubuntu26.04下uv所需的环境变量pyproject.toml

本文档提供了Python开发环境的配置指南。主要包括: 设置环境变量(HF_ENDPOINT、UV_PYTHON_INSTALL_MIRROR等) 创建pyproject.toml配置文件,定义项目元数据(名称、版本等) 指定依赖项(torch系列库)及其安装源(PyTorch官方CUDA 12.8镜像) 配置Python版本要求(>=3.13,<3.14) 设置平台限制(Linux/Windows) 该配置适用于需要PyTorch CUDA 12.8支持的项目开发环境搭建。

拥抱具身智能,昇腾Ascend C 593

爬虫逆向:Hook 技术原理与实战

Hook 技术​(钩子技术)是一种通过拦截和修改程序执行流程的技术手段。它允许开发者在目标程序的特定位置插入自定义代码,以改变程序的默认行为或获取运行时信息。Hook 技术广泛应用于调试、逆向工程、性能分析、安全防护等领域。Hook 技术在爬虫逆向中非常有用,能够有效获取和修改目标程序的数据。通过合理使用 Hook 工具和技术,可以显著提升爬虫的效率和成功率。但使用时需注意法律和道德问题,确保行为合规。

数据知道的博客 1万+

linux Ubuntu下jenkins+svn+idea实现自动部署maven项目

踩了好多坑、所以记录一下 开搞前准备 1、jdk 2、maven 3、tomcat 把这些安装好后。这里就不细讲这些安装,最好单独为Jenkins准备一个tomcat,好执行自动化部署启动 http://mirrors.jenkins.io/ 下载war包   看你运行在java8 还是7上  2.46.3 以后必须要在java8下运行 我运行在7所以下载的 2.46.3版本 放到t

Leeclick的博客 669

开源数字人、虚拟直播部署教程

对,你无看错,是欧美的。在直播带货案例里,我们把模型导入到ue4,我们给模型在ue4里预设了四个动作(站着、站着说话、坐着、坐着说话),三个表情(平静、开发、愤怒),三个镜头(全局、近矩说话、看显示器播放商品展示)。我们只需要把目标主播的直播给录制下来,提取样本数据,然后训练一个从粉丝的不同刺激的组合,到主播的不同响应方式的多元逻辑回归的数学模型参数即可。

南七小僧的学海无涯 4563

Docker镜像离线批量导入:从原理到工程化实践

Docker镜像作为容器化技术的核心载体,其分层存储机制实现了应用环境的标准化封装。通过理解镜像层复用原理,开发者可以高效管理应用依赖,确保环境一致性。在离线或内网场景下,镜像的批量搬运成为关键需求,这直接关系到微服务部署的效率和可靠性。利用docker save/load命令组合,结合自动化脚本,能够构建一套完整的离线镜像分发方案,有效解决网络隔离环境下的部署难题,提升CI/CD流程的稳定性与交付速度。

weixin_30298497的博客 464

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

企业级JDK1.8部署实战:从安装到集群配置

在实际实施中,我们发现三个常见问题需要特别注意:不同Linux发行版的路径差异、防病毒软件对静默安装的拦截、历史残留Java版本导致的冲突。建议在正式批量部署前,先在各类典型环境做充分测试。这套方案最大的优势是实现了"一次编写,到处运行"的部署体验。通过将安装脚本、配置模板和检查工具打包成标准化部署包,新服务器接入时只需简单执行就能完成全套Java环境准备。最近在InsCode(快马)平台上尝试部署Java web项目时,发现其内置的JDK环境已经做了专业配置,省去了手动安装的麻烦。

GoldenleafRaven13的博客 577

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: shell脚本---实现mysql定时备份、删除、恢复
下一篇: shell脚本---实现es备份导出到本地形成json文件
lcm_linux
博客等级 码龄7年 7258粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值