A chamada do sistema enviou avisos para stderr: erro: opção não suportada (sintaxe BSD)

2

Quando executamos o módulo Nagios check_procs no redhat7 os, estamos enfrentando erros abaixo. Ao googling descobrimos que precisamos reinstalar o pacote procps. Nós também reinstalamos o pacote procps, mas o módulo está funcionando para a primeira tentativa e, em seguida, está falhando.

Error: System call sent warnings to stderr: error: unsupported option (BSD syntax)
    
por pravin09 22.12.2015 / 11:33

2 respostas

4

Error: System call sent warnings to stderr: error: unsupported option (BSD syntax)

O problema é que há uma correspondência incorreta entre o plug-in check_procs e o comando ps do sistema operacional.

O plug-in check_procs do Nagios gera o comando ps para verificar processos, aplicando uma string de formato scanf() ao resultado do comando para descobrir o que ele precisa saber sobre os processos em execução. Dada a grande variação nos comandos ps em todos os sistemas operacionais, ele deve adequar isso ao comando ps de cada sistema operacional.

Isso acontece quando o plug-in check_procs é compilado da origem para o binário. Há um script de configuração de 400 linhas ímpares que verifica laboriosamente cada combinação conhecida de ps argumentos + opções e a sequência de caracteres de formato de verificação, por sua vez, até que uma funcione. Esta combinação é então conectada ao plug-in compilado.

Se a combinação estiver errada para o sistema real em que check_procs é executado, ps gerará a saída no formato errado (testemunha MacPorts bug # 28801 e issue-plugins issue # 1328 ) ou gera mensagens de erro para o erro padrão (testemunha Debian Bug # 296003 ) que foram coletadas pelo plug-in e alertado. O último é o que está acontecendo aqui.

Isso tem várias conseqüências:

  • Se você estiver construindo o plug-in a partir do código-fonte, precisará criá-lo com o mesmo comando ps instalado, como será instalado na máquina de produção final.
  • Se você estiver usando um binário pré-compilado, esse binário precisa ter sido construído em um sistema cujo comando ps corresponde ao da sua máquina em que você está executando o plug-in. Se você mesmo não construiu o binário, precisa falar com a pessoa que o fez, ou pelo menos com o mantenedor do pacote, se estiver usando um binário pré-compilado empacotado.
por 22.12.2015 / 14:48
0

Fizemos um script para o processo de verificação total, que resolve o Erro: aviso de chamada do sistema para stderr: erro: problema de opção não suportada (sintaxe do BSD) .

Por favor, encontre o script abaixo.

 #!/bin/bash
#
# Script to check Process usage on Linux. Ignores Process used by disk cache.
#
# Requires the bc command
#                $1 $2 $3 $4
# ./check_Process -w 85 -c 95
print_help() {
    echo "Usage:"
    echo "[-w] Warning level as a percentage"
    echo "[-c] Critical level as a percentage"
    exit 0
}

while test -n "$1"; do
    case "$1" in
        --help|-h)
            print_help
            exit 0
            ;;
        -w)
            warn_level=$2
            shift
            ;;
        -c)
            critical_level=$2
            shift
            ;;
        *)
            echo "Unknown Argument: $1"
            print_help
            exit 3
            ;;
    esac
    shift
done

if [ "$warn_level" == "" ]; then
    echo "No Warning Level Specified"
    print_help
    exit 3;
fi

if [ "$critical_level" == "" ]; then
    echo "No Critical Level Specified"
    print_help
    exit 3;
fi

count='ps -ef | wc -l'

###################

if [ "$count" -lt "$warn_level" ]; then
    echo "Process OK:$count | 'Process' =$count;$warn_level;$critical_level"
    exit 0;
elif [ "$count" -ge "$warn_level" ] && [ "$count" -le "$critical_level" ]; then
    echo "Process WARNING: $count | 'Process'=$count;$warn_level;$critical_level"
    exit 1;
elif [ "$count" -gt "$critical_level" ]; then
    echo "Process CRITICAL: $count | 'Process'=$count;$warn_level;$critical_level"
    exit 2;
fi
    
por 24.12.2015 / 15:55

Tags