Meus arquivos de log estão sendo despejados com a seguinte mensagem ao executar scripts de shell usando alguns comandos subjacentes do MySQL.
Aqui está a mensagem:
"Aviso: o uso de uma senha na interface da linha de comandos pode ser inseguro."
Para interromper 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 output.log
.
Se eu mudar 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 SQL nos arquivos de log usando apenas a definição cron.
shell-script
logs
io-redirection
mysql
puvvada jagadish
fonte
fonte
run_wrapper.sh >> output.log 2>&1
-p
opção na linha de comando. Em vez de corrigi-lo (por exemplo, criando um~/.my.cnf
com 600 perms) o OP quer simplesmente ignorar e descartar o aviso (e somente esse aviso, nem todos stderr)Respostas:
No seu script bash, edite-o na parte superior
e consulta mysql como:
mysql -u username -h host db -e "statement"
Referência: da resposta publicada no Stackoverflow . Outras respostas também podem ser seguidas.
fonte
procure uma linha no seu invólucro semelhante a
e mude para
isso resolve a fonte do aviso.
fonte
Parece que você está perdendo o redirecionamento stderr
run_wrapper.sh
, então os erros não estão passando pelogrep
arquivo de log e daí para ele.Tente fazer isso se desejar que stdout e sdterr sejam gravados no seu arquivo de log
Ou se você deseja apenas os erros gravados no arquivo de log e o stdout deixou de gravar no terminal de chamada, tente este
fonte
Tente o seguinte:
Redireciona o stderr via Substituição de Processo para
grep -v ...
e a saída disso é anexada>>
aoutput.log
Você provavelmente vai querer usar (GNU)
grep
's--line-buffered
opção, bem como-v
para tornar a saída certeza erro não está atrasado.Se o pós-processamento do arquivo de log for uma opção aceitável, você poderá excluir as linhas "Aviso:" indesejadas do arquivo de log após a
run_wrapper.sh
conclusão.O seguinte fragmento de script de shell salva o registro de data e hora (in
$ts
) do arquivo de log (in$lf
) antes da execuçãosed -i
e o restaura posteriormente:Se você precisar preservar o inode do arquivo de log (por exemplo, porque possui links físicos), use em
ed
vez desed
:fonte
-i
(e para a maioria das formas de edição "in-loco"). Se for executado imediatamente depois, deve ser apenas microssegundos ou segundos diferentes, dependendo do tamanho do arquivo de log, claro, mas não há nenhuma maneira a.d
comando (linha de exclusão) emsed
vai criar uma linha em branco - o que exatamente você quer dizer com isso?sed
opção @jagadishpuvvada agora salva e restaura o registro de data e hora do output.log.Tente adicionar isso ao final do seu comando:
fonte