SharePlex 基於Solaris 10 Linux自動巡檢指令碼

你好我是李白發表於2020-01-09

1.check指令碼,可單獨執行,也可透過start指令碼呼叫

#!/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 and SunsOS 10.5.
############################################################################################################################################ 
#MailUserName='yourname@yourcompany'
#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}'`
v_num_cop=`ps -ef|grep sp_cop|grep -v grep|awk '{print $2}'|wc -l`
v_os=`uname -a|awk '{print $1}'`
i=1
if [ ${v_os} = "SunOS" ];then
    while [ $i -le ${v_num_cop} ]
    do
        v_pid=`echo ${v_cop}|/usr/xpg4/bin/awk -v v_i="${i}" '{print $v_i}'`
        v_script_name=`echo $0`
        v_dirname=`dirname ${v_script_name}`
        SP_SYS_HOST_NAME=`pfiles ${v_pid}|grep sockname|sed -n '$p'|awk '{print $3}'`
        SP_PORT=`pfiles $v_pid|grep sockname|sed -n '$p'|awk '{print $5}'`
        SP_PRODIR=`ps -ef|grep sp_cop|grep -v grep|grep ${v_pid}|awk '{print $8}'|cut -d '.' -f1|sed 's/\/$//'`
        SP_SYS_VARDIR=`pfiles ${v_pid}|sed -n '$p'|sed -n 's/\/rim//p'|tr -d " "`
        export SP_SYS_VARDIR
        export SP_SYS_HOST_NAME
        ${SP_PRODIR}/bin/sp_ctrl > ${v_dirname}/splex_temp.log <<EOF
                                         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`
            if [ ${v_err_count} -eq 0 ];then
                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"
elif [ ${v_os} = "Linux" ];then
    while [ $i -le ${v_num_cop} ]
    do
        v_pid=`echo ${v_cop}|awk -v v_i="${i}" '{print $v_i}'`
        v_script_name=`echo $0`
        v_dirname=`dirname ${v_script_name}`
        v_sp_ipaddr=`netstat -anp|grep tcp|grep ${v_pid}|awk '{print $4}'`
        SP_SYS_HOST_NAME=`echo ${v_sp_ipaddr%:*}`
        SP_PORT=`echo ${v_sp_ipaddr##*:}`
        SP_PRODIR=`ps -ef|grep sp_cop|grep -v grep|grep ${v_pid}|awk '{print $8}'|cut -d '.' -f1|sed 's/\/$//'`
        SP_SYS_VARDIR=`ls -l /proc/${v_pid}/cwd|awk '{print $11}'|sed -n 's/\/dump$//p'`
        export SP_SYS_VARDIR
        export SP_SYS_HOST_NAME
        ${SP_PRODIR}/bin/sp_ctrl > ${v_dirname}/splex_temp.log <<EOF
                                         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`
            if [ ${v_err_count} -eq 0 ];then
                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."
                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"
else
    echo "Caution : This Platform Are Not Support,Please Contact The Vendor."
fi
# End Scripts

2.Start指令碼,不可單獨執行,需要呼叫上面check指令碼

#!/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

3. Stop指令碼

#!/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

4. Readme檔案

1.開始檢測
指令碼作用:
(1)會在指令碼所在目錄建立splex_check_log目錄
(2)用於存放生成的SharePlex_Report_開頭的log檔案,記錄SharePlex例項情況
(3)預設間隔20分鐘執行一次,可透過修改指令碼interval引數更改執行頻率
(4)會自動刪除三天前或者當日志目錄超過50M會自動刪除目錄重建
(5)該指令碼自動呼叫目錄下check_shareplex_health.sh指令碼
(6)指令碼執行步驟如下
chmod u+x start_check.sh
chmod u+x stop_check.sh
chmod u+x check_shareplex_health.sh
./start_check.sh &
2.停止指令碼使用如下指令碼
指令碼作用:
(1)找出執行指令碼程式並執行kill命令
./stop_check.sh
3.check_shareplex_health.sh指令碼說明
(1)該指令碼為start_check.sh指令碼最終呼叫巡檢指令碼
(2)郵箱傳送告警功能預設為註釋狀態,如果告警傳送郵件,則可以編輯check_shareplex_health.sh指令碼
        a.配置伺服器sendmail功能,確保伺服器可以傳送郵件
        b.去掉check_shareplex_health.sh開頭郵件部分註釋
        c.修改MailUserName變數為需要傳送郵件地址,並將48行管道符前面註釋#去掉,就可以使用郵件功能


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31439444/viewspace-2672631/,如需轉載,請註明出處,否則將追究法律責任。

相關文章