Suprime mensagens de aviso do MySQL no shell script, mas permite erros

7

Meus arquivos de log estão sendo despejados com a seguinte mensagem durante a execução de scripts de shell usando alguns comandos subjacentes do MySQL.

Aqui está a mensagem:

"Warning: Using a password on the command line interface can be insecure."

Para parar essas mensagens, estou usando a seguinte definição de trabalho.

Exemplo:

run_wrapper.sh |grep -v "Warning: Using a password" > output.log 2>&1

Isso funcionou, mas os erros do MySQL não estão sendo registrados em output.log .

Se eu alterar a definição da seguinte forma, os erros do MySQL começarão a aparecer se houver

run_wrapper.sh > output.log 2>&1

Portanto, a questão é como suprimir as mensagens de aviso e também relatar erros de SQL nos arquivos de log usando apenas a definição do cron?

    
por jagadish puvvada 05.07.2016 / 11:03

5 respostas

14

No seu script bash, edite-o no topo

export MYSQL_PWD=yourdbpassword

e consulta mysql como: mysql -u username -h host db -e "statement"

Referência: da resposta postada em Stackoverflow . Outras respostas também podem ser seguidas.

    
por 05.01.2017 / 07:45
1

Parece que você está perdendo o redirecionamento stderr do run_wrapper.sh , então os erros não estão passando pelo grep e daí para o arquivo de log.

Tente isto se você está feliz em ter ambos stdout e sdterr escritos em seu arquivo de log

run_wrapper.sh 2>&1 | grep -v "Warning: Using a password" > output.log

Ou se você quiser apenas os erros gravados no arquivo de log, e stdout deixado escrevendo no terminal de chamada, tente isto

( run_wrapper.sh 2>&1 1>&3 | grep -v "Warning: Using a password" > output.log ) 3>&1
    
por 08.07.2016 / 14:33
1

pesquise uma linha no seu wrapper semelhante a

mysql -u<username> -p<some_password> -hlocalhost -D<database_name> 

e mude para

export MYSQL_PWD=<some_password> ; mysql -u<username> -hlocalhost -D<database_name> 

isso resolve a fonte do aviso.

    
por 14.05.2017 / 16:48
0

Tente isto:

lf='output.log'
> "$lf"   # first truncate/create the logfile.
run_wrapper.sh >> "$lf" 2> >(grep -v "Warn.*passw.*insec" >> "$lf")

Redireciona stderr via Substituição de Processo para grep -v ... , e a saída é anexada com >> to output.log

Você provavelmente deseja usar a opção grep do --line-buffered (GNU), assim como -v para garantir que a saída do erro não seja atrasada.

Se o pós-processamento do arquivo de log for uma opção aceitável para você, basta excluir a (s) linha (s) indesejada (s) "Aviso:" do arquivo de registro após a conclusão de run_wrapper.sh .

O fragmento de script de shell a seguir salva o registro de data e hora (em $ts ) do arquivo de log (em $lf ) antes de executar sed -i e restaura mais tarde:

lf='output.log'

run_wrapper.sh >& "$lf"

ts=$(date -r "$lf" '+%Y%m%d%H%M.%S')
sed -i -e '/Warning: Using a password/d' "$lf"
touch -t "$ts" "$lf"

Se você precisar preservar o inode do arquivo de registro (por exemplo, porque ele tem links físicos), use ed em vez de sed :

ts=$(date -r "$lf" '+%Y%m%d%H%M.%S')
printf "%s\n" 'g/Warning: Using a password/d' w | ed -s "$lf"
touch -t "$ts" "$lf"
    
por 05.07.2016 / 15:03
0

Tente adicionar isso ao final do seu comando:

/dev/null 2>&1

    
por 15.06.2017 / 03:51