
Eu tenho um script bash para um cron job que usa o comando do Google Cloud SDK gcloud
após algumas instruções condicionais.
por exemplo.
gcloud compute firewall-rules update allow-ssh --source-ranges=$(echo "${mylocations[@]}" | tr ' ' ',')
É executado usando crontab
assim:
*/2 * * * * /home/user/bin/firewall-update.sh >/dev/null
Eu tenho um MTA de e-mail configurado, para poder receber e-mails sobre erros do servidor, mas o stdout é redirecionado para /dev/null
.
O problema é que a saída do gcloud vai para stderr, mesmo quando executada com sucesso, então sempre recebo um e-mail com esse tipo de linha sempre que o script é executado.
TÍTULO: Cron user@host /home/user/bin/firewall-update.sh >/dev/null
Atualizado [https://www.googleapis.com/compute/v1/projects/project-name-4234534/global/firewalls/allow-ssh].
Atualizado [https://www.googleapis.com/compute/v1/projects/project-name-4234534/global/firewalls/allow-mosh].
...
Tentei adicionar --verbosity=error
e critical
aos none
comandos gcloud, mas eles não surtiram efeito.
Por que a saída vai para stderr quando é concluída com êxito e como posso parar de receber esses e-mails e ainda recebê-los quando há um erro?
Responder1
A solução é adicionar este sinalizador global, que se aplica a todos os comandos 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
Os erros reais ainda são direcionados para stderr.