我有一个用于 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
,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。