У меня есть сценарий bash, работающий как задание cron, в котором есть несколько команд gcloud.
например.
gcloud compute firewall-rules update allow-ssh--source-ranges=$(echo "${mylocations[@]}" | tr ' ' ',')
У меня есть запись crontab, перенаправляющая stdout в / dev / null, так что я не получаю электронные письма каждый раз, когда он запускается.
Проблема в том, что вывод gcloud отправляется на stderr, даже если ошибки нет, поэтому я получаю такие электронные письма:
НАЗВАНИЕ: Cron user @ host /home/user/bin/firewall-update.sh> / dev / null
Обновлено [https://www.googleapis.com/compute/v1/projects/project-name-4234534/global/firewalls/allow-ssh].
...
Я пробовал добавить --verbosity=error
, critical
и none
к командам gcloud, но они не действуют.
Итак, как мне остановить gcloud от отправки этого сообщения на stderr после успешного завершения? Почему он вообще это делает?
Решение состоит в том, чтобы добавить этот глобальный флаг, который применяется ко всем командам 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.
Я полагаю, это так, потому что вы перенаправляете ТОЛЬКО в / dev / null stdout. Cron также отправит вам электронные письма, если есть какие-то ошибки. Попробуйте также перенаправить в / dev / null stderr. Добавьте в конец вашей команды crontab что-то вроде этого:
> /dev/null 2>&1