
У меня есть 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.