Meine Protokolldateien werden mit der folgenden Meldung gesichert, während Shell-Skripte mit einigen zugrunde liegenden MySQL-Befehlen ausgeführt werden.
Hier ist die Nachricht:
"Warnung: Die Verwendung eines Kennworts auf der Befehlszeilenschnittstelle kann unsicher sein."
Um diese Nachrichten zu stoppen, verwende ich die folgende Jobdefinition.
Beispiel:
run_wrapper.sh |grep -v "Warning: Using a password" > output.log 2>&1
Dies hat funktioniert, aber die MySQL-Fehler werden nicht protokolliert output.log
.
Wenn ich die Definition wie folgt ändere, werden gegebenenfalls MySQL-Fehler angezeigt
run_wrapper.sh > output.log 2>&1
Die Frage ist also, wie die Warnmeldungen unterdrückt und SQL-Fehler in Protokolldateien nur mit der Cron-Definition gemeldet werden können.
shell-script
logs
io-redirection
mysql
jagadisch puvvada
quelle
quelle
run_wrapper.sh >> output.log 2>&1
-p
Option in der Befehlszeile verwenden. Anstatt es zu reparieren (z. B. durch Erstellen einer~/.my.cnf
mit 600 Dauerwellen), möchte das OP die Warnung (und nur diese Warnung, nicht alle von stderr) einfach ignorieren und verwerfenAntworten:
Bearbeiten Sie es in Ihrem Bash-Skript oben
und MySQL-Abfrage wie:
mysql -u username -h host db -e "statement"
Referenz: Aus der Antwort bei Stackoverflow . Andere Antworten können ebenfalls verfolgt werden.
quelle
Suchen Sie in Ihrem Wrapper nach einer Zeile ähnlich wie
und wechseln zu
Dies löst die Quelle der Warnung.
quelle
Es sieht so aus, als ob Ihnen die stderr- Umleitung von
run_wrapper.sh
selbst fehlt , sodass die Fehler nicht durchgrep
und von dort in die Protokolldatei übertragen werden.Versuchen Sie dies stattdessen, wenn Sie froh sind, dass sowohl stdout als auch sdterr in Ihre Protokolldatei geschrieben wurden
Wenn Sie nur die Fehler in die Protokolldatei schreiben und stdout nicht mehr in das aufrufende Terminal schreiben möchten , versuchen Sie dies
quelle
Versuche dies:
Leitet stderr über Process Substitution an um
grep -v ...
und die Ausgabe davon wird an>>
to angehängtoutput.log
Sie wollen wahrscheinlich (GNU) verwenden ,
grep
‚s ---line-buffered
Option sowie-v
sicher Fehlerausgang verzögert wird nicht zu machen.Wenn die Nachbearbeitung der Protokolldatei für Sie akzeptabel ist, können Sie die unerwünschten Zeilen "Warnung:" nach
run_wrapper.sh
Abschluss einfach aus der Protokolldatei löschen .Das folgende Shell-Skriptfragment speichert den Zeitstempel (in
$ts
) der Protokolldatei (in$lf
) vor dem Ausführensed -i
und stellt ihn anschließend wieder her:Wenn Sie den Inode der Protokolldatei beibehalten müssen (z. B. weil sie feste Links enthält), verwenden Sie
ed
stattsed
:quelle
-i
(und die meisten Formen der "In-Place" -Bearbeitung "). Wenn sie unmittelbar danach ausgeführt wird, sollte sie nur Mikrosekunden oder Sekunden anders sein. je nach Logfile Größe natürlich Aber es gibt keine Möglichkeit , ein.d
in Befehl (Zeile löschen)sed
wird erstellen eine leere Zeile - , was Sie damit genau meinen?sed
Option @jagadishpuvvada speichert jetzt den Zeitstempel von output.log und stellt ihn wieder her.Versuchen Sie, dies am Ende Ihres Befehls hinzuzufügen:
quelle