当没有错误时如何抑制“gcloud computefirewall-rules update”输出?

当没有错误时如何抑制“gcloud computefirewall-rules update”输出?

我有一个作为 cron 作业运行的 bash 脚本,其中包含一些 gcloud 命令。

例如。

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

我有将 stdout 重定向到 /dev/null 的 crontab 条目,这样每次运行时我就不会收到电子邮件。

问题是,即使没有错误,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=errorcritical和添加none到 gcloud 命令中,但它们没有效果。

那么,当 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。

答案2

我认为它之所以这样做,是因为您只将 stdout 重定向到 /dev/null。如果出现错误,Cron 还会向您发送电子邮件。尝试将 stderr 也重定向到 /dev/null。在 crontab 命令末尾添加类似以下内容:

> /dev/null 2>&1

相关内容