我有一个 bash 脚本作为 cron 作业运行,其中包含一些 gcloud 命令。
例如。
gcloud compute firewall-rules update allow-ssh--source-ranges=$(echo "${mylocations[@]}" | tr ' ' ',')
我有 crontab 条目将标准输出重定向到 /dev/null,这样我就不会在每次运行时都收到电子邮件。
问题是 gcloud 的输出到 stderr,即使没有错误,所以我收到这样的电子邮件:
TITLE: 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 成功完成后,如何阻止 gcloud 将此消息发送到 stderr 呢?为什么它甚至会这样做?
我想,它这样做,因为,你重定向 /dev/null 仅标准输出。如果有一些错误,Cron 也会向您发送电子邮件。也尝试在 /dev/null stderr 中重定向。在 crontab 命令的末尾添加类似的内容:
> /dev/null 2>&1
解决方案是添加这个全局标志,它适用于所有 gcloud 命令:
https://cloud.google.com/sdk/gcloud/reference#--user-output-enabled
实际错误仍然指向标准错误。