跳到主要內容
節省工具箱Jason Tools
技術文章

Zimbra 外部 iCAL 訂閱輪詢間隔設定

Jason Cheng 發布 瀏覽 2 次
Zimbra 外部 iCAL 訂閱輪詢間隔設定
本文目錄
  1. 輪詢間隔的屬性
  2. 查詢目前設定
  3. 設定輪詢間隔
  4. 清除設定
  5. 注意事項
  6. 結論
  7. 參考資料

Zimbra 使用者訂閱了外部的 iCAL 行事曆(例如其他系統分享出來的 .ics 網址),常常會反映:分享端已經刪掉的行程,訂閱端隔了大半天還看得到。

這是因為外部行事曆訂閱是定時去抓的,而 Zimbra 預設的間隔是 12 小時。這篇說明怎麼查詢與調整這個輪詢間隔。

適用版本:Zimbra 10.x(NETWORK、FOSS 皆適用)

外部 iCAL 訂閱輪詢間隔的屬性與建議設定
外部 iCAL 訂閱輪詢間隔的屬性與建議設定

輪詢間隔的屬性

外部 iCAL 訂閱在 Zimbra 裡屬於 cal 類型的 data source,控制輪詢間隔的屬性是:

zimbraDataSourceCalendarPollingInterval

依 Zimbra 原始碼中的屬性定義,這個屬性可以設在帳號或 COS,default COS 的預設值是 12h;明確設成 0 則不會自動輪詢。

通用屬性已經棄用

網路上很多文章寫的是 zimbraDataSourcePollingInterval,但這個通用屬性自 6.0.0 起在帳號與 COS 層級已經棄用,設了也不會生效,原本的值會被遷移到各協定專屬的屬性。我在 Zimbra 10.1.16 實測,這個屬性設在 COS 或帳號上是寫不進去的。

生效優先順序

Zimbra 決定一個 data source 的輪詢間隔,順序由高到低是:

  1. data source 自身設定的 zimbraDataSourcePollingInterval
  2. 帳號或 COS 上的協定專屬屬性 zimbraDataSourceCalendarPollingInterval
  3. 內建預設值

另外還有一個 zimbraDataSourceMinPollingInterval(預設 1m),是允許的最短間隔。

查詢目前設定

查帳號的 data source 與各自的輪詢值:

zmprov gds user01@example.com

輸出中 zimbraDataSourceType: cal 的就是 iCAL 訂閱。如果該 data source 沒有 zimbraDataSourcePollingInterval 這一行,代表它沒有設定個別值,會使用帳號或 COS 的設定。

查帳號層級的設定:

zmprov ga user01@example.com zimbraDataSourceCalendarPollingInterval

查帳號所屬 COS 的設定:

zmprov gc $(zmprov ga user01@example.com zimbraCOSId | awk '/zimbraCOSId:/ {print $2}') zimbraDataSourceCalendarPollingInterval

或直接查 default COS:

zmprov gc default zimbraDataSourceCalendarPollingInterval

設定輪詢間隔

值的格式為 1h、30m、15m 這類寫法(d 天、h 小時、m 分鐘、s 秒),沒有加單位時預設為秒。

COS 層級(建議)

影響該 COS 底下的所有帳號:

zmprov mc default zimbraDataSourceCalendarPollingInterval 1h
zmprov gc default zimbraDataSourceCalendarPollingInterval

帳號層級

只影響單一帳號:

zmprov ma user01@example.com zimbraDataSourceCalendarPollingInterval 1h

個別 data source 層級

最精準,優先順序也最高。先用 zmprov gds 取得 data source 名稱,再設定:

zmprov mds user01@example.com 'CAL-123456' zimbraDataSourcePollingInterval 1h

重新啟動 mailboxd

設定完成後,重新啟動 mailboxd 讓設定生效:

zmmailboxdctl restart

清除設定

要回到預設值,把屬性設成空字串即可:

# 清除 COS 層級
zmprov mc default zimbraDataSourceCalendarPollingInterval ''

# 清除帳號層級
zmprov ma user01@example.com zimbraDataSourceCalendarPollingInterval ''

如果以前誤設過已棄用的通用屬性,也建議一併清掉,避免日後混淆:

zmprov mc default zimbraDataSourcePollingInterval ''

注意事項

  • 間隔不要設太短:建議不要低於 5 到 10 分鐘。每次輪詢都會到分享端抓整份 .ics,間隔太短會增加兩端的負載,行事曆內容很多時尤其明顯
  • COS 層級影響範圍大:會連帶影響同一個 COS 所有帳號的 iCAL 訂閱,只想調整單一帳號或單一訂閱,改用帳號或 data source 層級
  • data source 的設定優先:任何 data source 本身有設定 zimbraDataSourcePollingInterval,會蓋過帳號與 COS 的設定
  • 想立即更新內容:在訂閱端把該外部行事曆移除後重新加入,就會強制重新抓取一次
  • 1h 對行事曆訂閱來說通常已經足夠

結論

外部 iCAL 訂閱更新很慢,原因是 Zimbra 預設 12 小時才抓一次。調整時要注意用對屬性:zimbraDataSourceCalendarPollingInterval,不是網路文章常見、已經棄用的 zimbraDataSourcePollingInterval。一般建議在 COS 層級設成 1h,兼顧更新速度與系統負載。

參考資料

Jason Cheng

Jason Cheng

企業開源技術顧問,專注架構規劃與實務導入

關於作者 →

延伸閱讀