我有一个作为 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=error
、critical
和添加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