
Tengo un script bash para un trabajo cron que usa gcloud
el comando del SDK de Google Cloud después de algunas declaraciones condicionales.
p.ej.
gcloud compute firewall-rules update allow-ssh --source-ranges=$(echo "${mylocations[@]}" | tr ' ' ',')
Se ejecuta crontab
así:
*/2 * * * * /home/user/bin/firewall-update.sh >/dev/null
Tengo un MTA de correo electrónico configurado, por lo que puedo recibir correos electrónicos sobre cualquier error del servidor, pero la salida estándar se redirige a /dev/null
.
El problema es que la salida de gcloud va a stderr, incluso cuando se ejecuta correctamente, por lo que siempre recibo un correo electrónico con este tipo de líneas cada vez que se ejecuta el script.
TÍTULO: Cron usuario@host /home/user/bin/firewall-update.sh >/dev/null
Actualizado [https://www.googleapis.com/compute/v1/projects/project-name-4234534/global/firewalls/allow-ssh].
Actualizado [https://www.googleapis.com/compute/v1/projects/project-name-4234534/global/firewalls/allow-mosh].
...
Intenté agregar --verbosity=error
y critical
a none
los comandos de gcloud, pero no tienen ningún efecto.
¿Por qué la salida va a stderr cuando se completa exitosamente y cómo puedo dejar de recibir estos correos electrónicos y al mismo tiempo recibirlos cuando hay un error?
Respuesta1
La solución es agregar esta bandera global, que se aplica a todos los comandos de gcloud:
--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
Los errores reales todavía se dirigen a stderr.