#!/bin/bash
# Created by czh version v1.0
# This script was used to check SharePlex Instance health.
# This Script was created on RHEL 7.6 Platform.
v_log_dir_name=splex_check_log
v_num_cop=`ps -ef|grep sp_cop|grep -v grep|awk '{print $2}'|wc -l` # 统计sp_cop数量
if [ ${v_num_cop} -le 0 ];then # 判断是否存在sp_cop进程,如果不存在,提示并退出执行
echo -e "\n**************************************************************"
echo -e " !!!No SharePlex Instance,Please Check!!! "
echo -e "Please Check SharePlex Instance,The Sp_cop Process Not Active!"
echo -e "**************************************************************\n"
else
echo -e "\n######################################################################################################################"
echo -e "\nStarting Check"
echo -e "`date +%A' '%F' '%H:%M:%S`\n"
echo -e "######################################################################################################################\n"
while true
do
v_dirname=`dirname $0` # 通过特殊变量$0取脚本名称,使用dirname取路径,确保下面创建文件在脚本所在路径
if [ -d "${v_dirname}/${v_log_dir_name}" ];then
echo "Notice: splex_check_log directory already exist,will continue."
else
mkdir -p ${v_dirname}/${v_log_dir_name}
fi
interval=1200
log_name=shareplex_check
v_date=`date +%A-%F-%H%M%S`
${v_dirname}/check_shareplex_health.sh >> ${v_dirname}/${v_log_dir_name}/${log_name}_${v_date}.log & # 调用check_shareplex_health.sh脚本完成检查
v_dir_size=`du -sk "${v_dirname}/${v_log_dir_name}"/|awk '{print $1}'`
echo ${v_file_size}
if [ ${v_dir_size} -ge 51200 ];then
rm -rf ${v_dirname}/${v_log_dir_name}
fi
sleep ${interval}
done
fi
第三部分 check_shareplex_health.sh
#!/bin/bash
# Created by czh version v1.0
# This script was used to check SharePlex Instance health.
# This Script was created on RHEL 7.6 Platform.
# 如果需要发送邮件,则将下面部分以及49行注释去掉,在下面部分输入正确的邮件地址即可。
############################################################################################################################################
#MailUserName='yourname@yourcompany' # 如果需要发送邮件,则需要输入邮箱地址,多个邮箱地址以单引号括起来,逗号隔开'addr1','addr2'
#if [ "$MailUserName" = "yourname@yourcompany" ]
# then
# echo "Please modify the script so it has a valid email address"
# exit 0
#fi
############################################################################################################################################
# Start Scripts
v_cop=`ps -ef|grep sp_cop|grep -v grep|awk '{print $2}'` # 获取操作系统sp_cop主进程
v_num_cop=`ps -ef|grep sp_cop|grep -v grep|awk '{print $2}'|wc -l` # 统计sp_cop数量
i=1 # 计数,用于后面循环判断当前服务器有多少个SharePlex实例
while [ $i -le ${v_num_cop} ]
do
v_pid=`echo ${v_cop}|awk -v v_i="${i}" '{print $v_i}'` # awk中使用-v选项可以使用自定义变量,获取sp_cop os pid
v_script_name=`echo $0`
v_dirname=`dirname ${v_script_name}` # 通过特殊变量$0取脚本名称,使用dirname取路径,确保下面创建文件在脚本所在路径
v_sp_ipaddr=`netstat -anp|grep tcp|grep ${v_pid}|awk '{print $4}'` # 根据获取的pid,使用netstat获取ip地址以及端口
SP_SYS_HOST_NAME=`echo ${v_sp_ipaddr%:*}` # 根据获取的pid,使用netstat获取ip地址并赋给变量SP_SYS_HOST_NAME
SP_PORT=`echo ${v_sp_ipaddr##*:}` # 根据netstat获取到的IP地址端口信息获取sp_cop端口号
SP_PRODIR=`ps -ef|grep sp_cop|grep -v grep|grep ${v_pid}|awk '{print $8}'|cut -d '.' -f1|sed 's/\/$//'` # 根据pid取出每个sp_cop进程prodir路径
SP_SYS_VARDIR=`ls -l /proc/${v_pid}/cwd|awk '{print $11}'|sed -n 's/\/dump$//p'` # 根据sp_cop进程pid,利用cwd获取vardir目录并赋值给SP_SYS_HOST_NAME
export SP_SYS_VARDIR
export SP_SYS_HOST_NAME
${SP_PRODIR}/bin/sp_ctrl > ${v_dirname}/splex_temp.log <<EOF # 利用show、version full命令获取进程状态以及软件版本
show
version full
exit
EOF
v_sp_version=`cat ${v_dirname}/splex_temp.log|grep -i "Version"` # 获取软件版本,便于后面输出版本信息
v_err_count=`egrep -i '(^Stopping|Aborting|Idle|Stopped by user|error)' ${v_dirname}/splex_temp.log |wc -l` # 统计进程不处于Running状态条目
if [ ${v_err_count} -eq 0 ];then # 如果不为Running状态为0,则进程正常或者没有任何进程,表示实例正常
echo -e "\n*********************************************"
echo -e "`date +%A' '%F' '%H:%M:%S`"
echo -e " SharePlex All Process Was Running "
echo -e "*********************************************"
else
echo -e "\n*********************************************"
echo -e " !!! Warnings !!!"
echo -e " SharePlex Process Has Problems,Please Check!"
echo -e "SharePlex Warnings ${SP_SYS_HOST_NAME}:${SP_PORT} Has Problems." #|mail -s 'SharePlex Warnings!' ${MailUserName} # 需要使用邮件功能,将管道符前面#注释字符去掉
echo -e " `date +%A' '%F' '%H:%M:%S` "
echo -e "*********************************************"
fi
echo -e "\n****************************************************************************************"
echo -e " SharePlex Instance ${SP_PORT} Bind IP Address Is : ${SP_SYS_HOST_NAME}:${SP_PORT}"
echo -e " SharePlex Product Directory Is : ${SP_PRODIR}"
echo -e " SharePlex Version Is : ${v_sp_version}"
echo -e " SharePlex Instance Vardir Directory Is : ${SP_SYS_VARDIR}"
echo -e " SharePlex Instance Cop Process Identifier Is : ${v_pid}"
echo -e " `date +%A' '%F' '%H:%M:%S`"
echo -e "****************************************************************************************\n"
i=$(($i+1))
done
rm -f ${v_dirname}/splex_temp.log
echo -e "\n######################################################################################################################"
echo -e "\nFinished check SharePlex instance!"
echo -e "`date +%A' '%F' '%H:%M:%S`\n"
echo -e "######################################################################################################################\n"
#exit 0
# End Scripts
第四部分 stop_check.sh
#!/bin/bash
# Created by czh version v1.0
# This script was used to check SharePlex Instance health.
# This Script was created on RHEL 7.6 Platform.
kill -9 `ps -ef|grep check_shareplex_health.sh|grep -v grep|awk '{print $2}'` 2>/dev/null
kill -9 `ps -ef|grep start_check.sh|grep -v grep|awk '{print $2}'` 2>/dev/null