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.
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?
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.
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
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.
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"
Tente adicionar isso ao final do seu comando:
/dev/null 2>&1