Как остановить вывод stderr из команды gcloud в скрипте cron, не останавливая при этом весь вывод ошибок?

Как остановить вывод stderr из команды gcloud в скрипте cron, не останавливая при этом весь вывод ошибок?

У меня есть bash-скрипт для задания cron, который использует gcloudкоманду Google Cloud SDK после некоторых условных операторов.

например.

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

Запускается crontabследующим образом:

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

У меня настроен почтовый MTA, поэтому я могу получать электронные письма о любых ошибках с сервера, но stdout перенаправляется в /dev/null.

Проблема в том, что вывод gcloud отправляется в stderr, даже при успешном запуске, поэтому я всегда получаю электронное письмо с подобными строками при каждом запуске скрипта.

НАЗВАНИЕ: Cron пользователь@хост /home/user/bin/firewall-update.sh >/dev/null

Обновлено [https://www.googleapis.com/compute/v1/projects/project-name-4234534/global/firewalls/allow-ssh].

Обновлено [https://www.googleapis.com/compute/v1/projects/project-name-4234534/global/firewalls/allow-mosh].

...

Я пробовал добавлять --verbosity=error, criticalи noneк командам gcloud, но они не дали никакого эффекта.

Почему вывод отправляется в stderr после успешного завершения и как можно прекратить получение этих писем, продолжая при этом получать их в случае возникновения ошибки?

решение1

Решение — добавить этот глобальный флаг, который применяется ко всем командам 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

Фактические ошибки по-прежнему направляются в stderr.

Связанный контент