«

ssh检查多台服务器http服务

指尖二进制 • 1 年前 • 1363 次点击 • BASH


#!/bin/bash

# 日志路径
M=/pitrix/log/http_process_check.log

# apache2服务的名称
HTTPD_SERVICE="httpd"

# 重启时间,24小时制
RESTART_TIME="11:26"
R1=`date -d "$RESTART_TIME" +%s`

# 当前时间 
# CURRENT_TIME=`date +%H:%M`
# CURRENT_TIME=`date +%H:%M`
CURRENT_TIME="11:26"
C1=`date -d "$CURRENT_TIME" +%s`

# 日志 yyds
log_format(){
    local log_level=$1
    local message=$2
    local timestap=$(date +"%Y-%m-%d %H:%M:%S:%N")
    echo "${timestap} [${log_level}] ${message}" >> ${M}
    if [[ $(cat $M | wc -l) -gt 100000 ]];then
        sed -i '1,30000d' $M
    fi
}

# 定义需要检查的机器列表
machines=("ecadevbj1a-webservice0" "ecadevbj1a-webservice1" )

# 检查并重启http服务的函数
check_and_restart_httpd() {
    machine=$1
    if ! ssh "$machine" systemctl is-active httpd > /dev/null 2>&1; then
        log_format "$machines httpd not running, restart service"
        if  ssh "$machine" systemctl restart httpd; then
            log_format "OK" "$machine httpd restart success"
        else
            log_format "ERROR" "$machine httpd restart failed"
        fi
    else
        log_format "INFO" "$machine httpd service on is running"
    fi
}
# 对列表中的每台机器执行检查和重启操作
for machine in "${machines[@]}"; do
    check_and_restart_httpd "$machine"
done

# 检查http进程超过5并在固定时间重启http
check_and_http_process_restart_service() {
    machine=$1
    process_count=$(ssh $machine "ps aux | grep $HTTPD_SERVICE | grep -v grep | wc -l")
    if [[ $process_count -ge 5 ]] && [[ "$R1" -eq "$C1" ]]; then
        log_format "OK" "$machine process >= 5, restart httpd success"
        ssh $machine "sudo /bin/bash -c 'systemctl restart httpd'"
    else
        log_format "INFO" "$machine process < 5 is not in the restart time, no need to restart httpd"
    fi
}
# 对列表中的每台机器执行检查和重启操作
for machine in "${machines[@]}"; do
    check_and_http_process_restart_service "$machine"
done
还没收到回复