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 輸出到標準錯誤,即使成功執行,所以每當腳本執行時我總是收到一封帶有這些行的電子郵件。
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 $$. 更新
$$ https://www.googleapis.com/compute/v1/projects/project-name-4234534/global/firewalls/allow-mosh $$. …
我嘗試將
--verbosity=error
,critical
和添加none
到 gcloud 命令,但它們沒有效果。為什麼在成功完成後輸出會轉到 stderr,我怎樣才能停止接收這些電子郵件,同時在出現錯誤時仍能接收到它們?
解決方案是添加這個全域標誌,它適用於所有 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
實際錯誤仍然指向標準錯誤。