1、根据服务名生成dump;
2、上传ftp然后备份dump文件
#!/bin/sh
set -e
#参数赋值,参数顺序:1、weblogic服务名;2、ftp的dump文件保存路径;3、ftp地址;4、ftp用户名;5、ftp密码;6、dump本地生成路径
server_name=$1
ftp_ip=$2
ftp_user=$3
ftp_pwd=$4
ftp_dir=$5
dump_path=$6
#导出dump文件
export_dump () {
datatime=`date "+%Y%m%d%H%M%S"`
dumpfile_name=${server_name}_dump-${datatime}.hprof
HeapDumpPath=$(ps -ef |grep $server_name |grep -v grep |grep -v weblogic.${server_name} |awk -F 'HeapDumpPath' '{print $2}' |awk '{print $1}' |awk -F '=' '{print $2}')
if [[ ${HeapDumpPath} =~ '/' ]];then
dumpfile_path=${HeapDumpPath%/*}
echo `date '+%F %T'` "$dumpfile_path"
else
#未获取到目录则创建
dumpfile_path=${dump_path}
if [ ! ${dumpfile_path} ];then
echo `date '+%F %T'` "服务未定义HeapDumpPath,参数同样为空,变量异常,退出操作!"
exit 1
fi
#对于自定义目录不存在需要创建
if [ ! -d "$dumpfile_path" ]; then
mkdir -p $dumpfile_path
fi
echo `date '+%F %T'` "HeapDumpPath为 $dumpfile_path"
fi
#
#检查dumpfile_path是不是一个目录
if [ ! -d ${dumpfile_path} ]; then
echo `date '+%F %T'` "$dumpfile_path 不是一个目录,请检查!"
exit 1
fi
#
#生成dump
java_path=$(ps -ef |grep java |grep -w "Dweblogic.Name=${server_name}"|grep -v grep |awk '{print $8}')
if [[ ${java_path} =~ '/java' ]];then
jmap_dir=${java_path%/*}
jmap_path=${jmap_dir}/jmap
${jmap_path} -dump:format=b,file=$(echo $dumpfile_path/${dumpfile_name}) $server_pid
if [ $? -eq 0 ]; then
echo `date '+%F %T'` "dump文件已经成功生成,生成的文件为:${dumpfile_name} "
echo `date '+%F %T'` "即将进行文件上传FTP服务器任务---"
putTo_ftp
else
echo `date '+%F %T'` "dump文件生成失败,任务结束!"
fi
else
jmap -dump:format=b,file=$(echo $dumpfile_path/${dumpfile_name}) $server_pid
if [ $? -eq 0 ]; then
echo `date '+%F %T'` "dump文件已经成功生成,生成的文件为:${dumpfile_name} "
echo `date '+%F %T'` "即将进行文件上传FTP服务器任务---"
putTo_ftp
else
echo `date '+%F %T'` "dump文件生成失败,任务结束!"
fi
fi
}
#将导出的dump文件上传到ftp服务器
putTo_ftp () {
#ftp上传
lftp <<EOF
open ftp://${ftp_user}:${ftp_pwd}@${ftp_ip}:21
set ftp:passive-mode 1
set net:timeout 15
set net:max-retries 2
mkdir ${ftp_dir}
cd ${ftp_dir}
lcd $(echo ${dumpfile_path})
put ${dumpfile_name}
bye
EOF
if [ $? -eq 0 ]; then
echo `date '+%F %T'` "${dumpfile_name}文件完成上传!"
echo `date '+%F %T'` "${dumpfile_name}文件开始备份......."
cd $(echo ${dumpfile_path})
tar -zcf ${server_name}_dump-$(date '+%Y%m%d%H%M%S').tar.gz ${dumpfile_name} --remove-files
echo `date '+%F %T'` "${dumpfile_name}文件备份为${server_name}_dump-$(date '+%Y%m%d%H%M%S').tar.gz"
fi
}
#校验PID参数是否有效并调度生成dump和文件上传任务
main_dump () {
server_pid=$(ps -ef |grep java |grep -w "Dweblogic.Name=${server_name}" |grep -v grep |awk '{print $2}')
if [ ! $server_pid ];then
echo `date '+%F %T'` "您输入的服务进程 $server_name 不存在!流程结束!"
exit 1
else
echo "您输入的$server_name 服务进程存在,即将进行导出dump文件任务......."
export_dump
fi
}
main_dump