Wie stoppt man die Stderr-Ausgabe des Gcloud-Befehls im Cron-Skript, ohne die gesamte Fehlerausgabe zu stoppen?

Wie stoppt man die Stderr-Ausgabe des Gcloud-Befehls im Cron-Skript, ohne die gesamte Fehlerausgabe zu stoppen?

Ich habe ein Bash-Skript für einen Cron-Job, der gcloudnach einigen bedingten Anweisungen den Befehl des Google Cloud SDK verwendet.

z.B.

gcloud compute firewall-rules update allow-ssh --source-ranges=$(echo "${mylocations[@]}" | tr ' ' ',')

crontabEs wird folgendermaßen ausgeführt :

*/2 * * * *        /home/user/bin/firewall-update.sh >/dev/null

Ich habe einen E-Mail-MTA eingerichtet, sodass ich E-Mails zu etwaigen Fehlern vom Server erhalten kann, aber stdout wird umgeleitet an /dev/null.

Das Problem besteht darin, dass die Ausgabe von gcloud an stderr geht, selbst wenn es erfolgreich ausgeführt wurde. Daher erhalte ich bei jeder Ausführung des Skripts immer eine E-Mail mit einer solchen Zeile.

TITEL: Cron user@host /home/user/bin/firewall-update.sh >/dev/null

Aktualisiert [https://www.googleapis.com/compute/v1/projects/project-name-4234534/global/firewalls/allow-ssh].

Aktualisiert [https://www.googleapis.com/compute/v1/projects/project-name-4234534/global/firewalls/allow-mosh].

...

Ich habe versucht --verbosity=error, criticalund nonezu den gcloud-Befehlen hinzuzufügen, aber sie haben keine Wirkung.

Warum wird die Ausgabe bei erfolgreichem Abschluss an stderr gesendet und wie kann ich den Erhalt dieser E-Mails stoppen, sie aber im Fehlerfall weiterhin erhalten?

Antwort1

Die Lösung besteht darin, dieses globale Flag hinzuzufügen, das für alle gcloud-Befehle gilt:

--no-user-output-enabled

    Print user intended output to the console. 
    Overrides the default core/user_output_enabled property value for this command invocation. 
    Use --no-user-output-enabled to disable.

https://cloud.google.com/sdk/gcloud/reference#--user-output-enabled

Tatsächliche Fehler werden weiterhin an stderr weitergeleitet.

verwandte Informationen