HEX
Server: Apache
System: Linux dinesh8189 5.15.98-grsec-sharedvalley-2.lc.el8.x86_64 #1 SMP Thu Mar 9 09:07:30 -03 2023 x86_64
User: cgmgerenciamento1 (814285)
PHP: 8.1.26
Disabled: apache_child_terminate,dl,escapeshellarg,escapeshellcmd,exec,link,mail,openlog,passthru,pcntl_alarm,pcntl_exec,pcntl_fork,pcntl_get_last_error,pcntl_getpriority,pcntl_setpriority,pcntl_signal,pcntl_signal_dispatch,pcntl_sigprocmask,pcntl_sigtimedwait,pcntl_sigwaitinfo,pcntl_strerror,pcntl_wait,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,php_check_syntax,php_strip_whitespace,popen,proc_close,proc_open,shell_exec,symlink,system
Upload Files
File: //proc/thread-self/root/etc/zabbix/monitoring/check_php_fpm.sh
#!/bin/bash
ACTION=$1
SERVICE=$2

# Função para listar os serviços sem depender do systemctl
get_services() {
    find /etc/systemd/system /usr/lib/systemd/system -name "php[0-9][0-9]-php-fpm.service" 2>/dev/null | awk -F'/' '{print $NF}' | sort -u
}

# Função para checar o status checando os processos ao invés do systemctl
is_active() {
    local srv=$1
    local base_name=${srv%.service}
    local prefix=${base_name%%-*}

    # Verifica se é php 5.3, 5.4 ou 5.5 para arrumar o formato de busca
    if [[ "$prefix" == "php53" || "$prefix" == "php54" || "$prefix" == "php55" ]]; then
        # Extrai os números e coloca um ponto (ex: 5.3)
        local ver_num=${prefix:3}
        local search_term="${ver_num:0:1}.${ver_num:1:1}"
    else
        # Para as outras versões usa a string inteira (ex: php74)
        local search_term="$prefix"
    fi

    # Verifica se existe o processo na memória ignorando o grep e o próprio script
    if ps aux | grep -v grep | grep -v "check_php_fpm" | grep -q "$search_term/php-fpm"; then
        return 0 # Rodando
    else
        return 1 # Parado
    fi
}

case $ACTION in
    discovery)
        # Retorna JSON para o LLD do Zabbix
        SERVICES=$(get_services)
        FIRST=1
        echo '{"data":['
        for S in $SERVICES; do
            if [ $FIRST -eq 0 ]; then echo ","; fi
            echo -n '    {"{#PHP_SERVICE}":"'$S'"}'
            FIRST=0
        done
        echo ""
        echo ']}'
        ;;
    status)
        # Retorna 1 se estiver running, 0 caso contrário
        if is_active "$SERVICE"; then
            echo 1
        else
            echo 0
        fi
        ;;
    down_count)
        # Conta o total de serviços fora do ar
        SERVICES=$(get_services)
        DOWN=0
        for S in $SERVICES; do
            if ! is_active "$S"; then
                DOWN=$((DOWN+1))
            fi
        done
        echo $DOWN
        ;;
    down_list)
        # Retorna "OK" ou uma string concatenada com os serviços parados
        DOWN_SERVICES=""
        SERVICES=$(get_services)
        for S in $SERVICES; do
            if ! is_active "$S"; then
                if [ -z "$DOWN_SERVICES" ]; then
                    DOWN_SERVICES="$S"
                else
                    DOWN_SERVICES="$DOWN_SERVICES, $S"
                fi
            fi
        done

        if [ -z "$DOWN_SERVICES" ]; then
            echo "OK"
        else
            echo "$DOWN_SERVICES"
        fi
        ;;
    *)
        echo "Uso: $0 (discovery|status <servico>|down_count|down_list)"
        exit 1
        ;;
esac