Mes fichiers journaux sont vidés avec le message suivant lors de l'exécution de scripts shell à l'aide de certaines commandes MySQL sous-jacentes.
Voici le message:
"Avertissement: l'utilisation d'un mot de passe sur l'interface de ligne de commande 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 output.log
.
Si je modifie la définition comme suit, les erreurs MySQL commencent à apparaître le cas échéant
run_wrapper.sh > output.log 2>&1
La question est donc de savoir comment supprimer les messages d'avertissement et également signaler les erreurs SQL dans les fichiers journaux en utilisant uniquement la définition cron?
shell-script
logs
io-redirection
mysql
puvvada jagadish
la source
la source
run_wrapper.sh >> output.log 2>&1
-p
option sur la ligne de commande. Au lieu de le corriger (par exemple en créant un~/.my.cnf
avec 600 perms), l'OP veut simplement ignorer et rejeter l'avertissement (et seulement cet avertissement, pas tout stderr)Réponses:
Dans votre script bash, modifiez-le en haut
et la requête mysql comme:
mysql -u username -h host db -e "statement"
Référence: D'après la réponse publiée sur Stackoverflow . D'autres réponses peuvent également être suivies.
la source
recherchez une ligne dans votre wrapper similaire à
et changer pour
cela résout la source de l'avertissement.
la source
Il semble que la redirection stderr manque de
run_wrapper.sh
lui-même, de sorte que les erreurs ne passent pas par legrep
et de là jusqu'au fichier journal.Essayez ceci à la place si vous êtes content d'avoir à la fois stdout et sdterr écrits dans votre fichier journal
Ou si vous ne voulez que les erreurs écrites dans le fichier journal, et stdout laissé l'écriture sur le terminal appelant, essayez ceci
la source
Essaye ça:
Redirige stderr via Substitution de processus vers
grep -v ...
, et la sortie de celle-ci est ajoutée>>
àoutput.log
Vous voudrez probablement utiliser l' option de (GNU)
grep
et vous assurer que la sortie d'erreur n'est pas retardée.--line-buffered
-v
Si le post-traitement du fichier journal est une option acceptable pour vous, vous pouvez simplement supprimer la ou les lignes "Avertissement:" indésirables du fichier journal après la
run_wrapper.sh
fin.Le fragment de script shell suivant enregistre l'horodatage (in
$ts
) du fichier journal (in$lf
) avant de l'exécutersed -i
et le restaure ensuite:Si vous devez conserver l'inode du fichier journal (par exemple parce qu'il a des liens durs), utilisez
ed
plutôt quesed
:la source
-i
(et la plupart des formes d'édition "sur place"). Si elle est exécutée immédiatement après, elle ne devrait différer que de quelques microsecondes ou secondes, selon la taille du fichier journal bien sûr , mais il n'y a aucun moyen une.d
commande (ligne de suppression) ensed
va créer une ligne vide - exactement ce que voulez - vous dire par là?sed
option @jagadishpuvvada enregistre et restaure désormais l'horodatage de output.log.Essayez d'ajouter ceci à la fin de votre commande:
la source