Stderr

如何在 cron 腳本中停止 gcloud 命令的 stderr 輸出而不停止所有錯誤輸出?

  • August 14, 2020

我有一個用於 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

實際錯誤仍然指向標準錯誤。

引用自:https://unix.stackexchange.com/questions/604248