Mes files journaux sont vidés avec le message suivant lors de l'exécution des scripts shell en utilisant certaines commands MySQL sous-jacentes.
Voici le message:
"Avertissement: l'utilisation d'un mot de passe sur l'interface de command line peut être peu sûre."
Pour arrêter ces messages, j'utilise la définition de travail suivante.
Exemple:
run_wrapper.sh |grep -v "Warning: Using a password" > output.log 2>&1
Cela a fonctionné mais les erreurs MySQL ne sont pas enregistrées dans output.log
.
Si je change la définition comme suit, les erreurs MySQL commencent à apparaître si
run_wrapper.sh > output.log 2>&1
La question est donc de savoir comment supprimer les messages d'avertissement et signaler les erreurs SQL dans les files journaux en utilisant uniquement la définition cron?
Dans votre script bash, éditez-le en haut
export MYSQL_PWD=yourdbpassword
et requête mysql comme: mysql -u username -h host db -e "statement"
Référence: De la réponse postée à Stackoverflow . D'autres réponses peuvent également être suivies.
Essaye ça:
lf='output.log' > "$lf" # first truncate/create the logfile. run_wrapper.sh >> "$lf" 2> >(grep -v "Warn.*passw.*insec" >> "$lf")
Redirige stderr via la substitution de process à grep -v ...
, et la sortie de celle-ci est ajoutée avec >>
à output.log
Vous souhaiterez probablement utiliser l'option --line-buffered
(GNU) grep
ainsi que -v
pour vous assurer que la sortie d'erreur n'est pas retardée.
Si le post-traitement du file journal est une option acceptable pour vous, vous pouvez simplement supprimer les lignes «Avertissement:» indésirables du file journal après l' run_wrapper.sh
de run_wrapper.sh
.
Le fragment de script shell suivant enregistre l'horodatage (dans $ts
) du file journal (dans $lf
) avant d'exécuter sed -i
et le restaure ensuite:
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"
Si vous devez conserver l'inode du file journal (par exemple parce qu'il a des liens durs), utilisez ed
plutôt que 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"
Il semble que vous run_wrapper.sh
redirection stderr de run_wrapper.sh
elle-même, de sorte que les erreurs ne passent pas par le grep
et de là dans le file journal.
Essayez ceci plutôt si vous êtes heureux d'avoir à la fois stdout et sdterr écrit dans votre file journal
run_wrapper.sh 2>&1 | grep -v "Warning: Using a password" > output.log
Ou si vous voulez seulement les erreurs écrites dans le file journal, et stdout laissé écrire au terminal appelant, essayez ceci
( run_wrapper.sh 2>&1 1>&3 | grep -v "Warning: Using a password" > output.log ) 3>&1
searchz une ligne dans votre emballage similaire à
mysql -u<username> -p<some_password> -hlocalhost -D<database_name>
et changer pour
export MYSQL_PWD=<some_password> ; mysql -u<username> -hlocalhost -D<database_name>
cela résout la source de l'avertissement.
Essayez d'append ceci à la fin de votre command:
/ dev / null 2> & 1