
Ich habe ein Bash-Skript für einen Cron-Job, der gcloud
nach einigen bedingten Anweisungen den Befehl des Google Cloud SDK verwendet.
z.B.
gcloud compute firewall-rules update allow-ssh --source-ranges=$(echo "${mylocations[@]}" | tr ' ' ',')
crontab
Es 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
, critical
und none
zu 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.