¿Cómo detener la salida stderr del comando gcloud en el script cron sin detener todos los resultados de error?

¿Cómo detener la salida stderr del comando gcloud en el script cron sin detener todos los resultados de error?

Tengo un script bash para un trabajo cron que usa gcloudel 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 crontabasí:

*/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=errory criticala nonelos 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.

información relacionada