如何在 cron 脚本中停止 gcloud 命令的 stderr 输出而不停止所有错误输出?

如何在 cron 脚本中停止 gcloud 命令的 stderr 输出而不停止所有错误输出?

我有一个用于 cron 作业的 bash 脚本,它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 user@host /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,criticalnone添加到 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。

相关内容