修正 Nextcloud “事務性檔案鎖定未設定”錯誤

如果 Nextcloud 顯示警告,提示事務性檔案鎖定未配置或已停用,則檔案操作可能難以抵禦並發寫入和中斷傳輸。通常的解決方法是配置受支援的​​鍵值儲存(例如 Redis 或 Valkey)來實現鎖定。首先要確定 Nextcloud 的安裝方式,然後同時設定快取服務和 Nextcloud;單獨安裝 Redis 並不能消除此警告。

Nextcloud 目前的管理手冊指出,事務鎖定預設使用資料庫。資料庫後端雖然可以工作,但會增加資料庫負載。 Redis 或 Valkey 可以提供專用的鎖定後端。具體的警告文字因 Nextcloud 版本而異:目前文件列出的是「事務文件鎖定已停用,這可能會導致競態條件問題」。單獨的記憶體快取警告與此問題不同。請參閱官方的事務文件鎖定指南和管理頁面警告參考。

更改伺服器之前

以下步驟假設您是 Nextcloud 主機的管理員。以下命令使用 Debian 或 Ubuntu 系統,並採用常規軟體包安裝方式;其他 Linux 發行版的軟體包名稱、服務名稱、PHP 版本和配置路徑可能有所不同。如果您使用的是 Nextcloud AIO、Docker、Snap、TrueNAS 或託管服務提供者提供的映像,請依照該部署的說明安裝和重新啟動服務。在主機上安裝 PHP 軟體包可能不會更改容器或裝置內部的 PHP 環境。

  • 找到 Nextcloud 的 Web 根目錄及其活動狀態config/config.php。
  • 在編輯文件前,請務必先進行安全備份。該文件可能包含資料庫憑證和其他機密資訊。
  • 確認 Nextcloud 使用的是單一 Web 伺服器還是多個 Web 伺服器。多節點架構需要一個共享的 Redis/Valkey 伺服器或集群,且每個 Nextcloud 節點都必須能夠存取該伺服器或叢集。
  • 如果您的用戶依賴不間斷的文件上傳,請安排一個較短的維護視窗。

步驟 1:確認警告和安裝類型

以管理員身份登入並開啟管理設置,然後查看安全性和設定警告的概述。記錄下完整的警告資訊。如果頁面僅顯示未配置記憶體緩存,則需要進行不同的檢查;請根據需要配置本機快取(例如 APCu),但不要假設它會提供交易鎖定。 Nextcloud 文件指出,必須在配置中明確啟用快取設定config.php。

在傳統的 Linux 安裝中,使用 shell 來識別部署路徑並檢查設定文件,而無需將敏感資訊列印到共用終端日誌中。例如,在伺服器上:

cd /var/www/nextcloud
ls -l config/config.php

請替換/var/www/nextcloud為您的實際路徑。對於容器,請確定容器及其掛載的配置,而不是編輯執行實例不使用的主機端檔案。

步驟 2:安裝並啟動鍵值存儲

對於 Debian 或 Ubuntu 系統,傳統的 Redis 後端通常使用 Redis 服務和 PHP Redis 擴充。請安裝與 Web 伺服器所使用的 PHP 版本相符的軟體包:

sudo apt update
sudo apt install redis-server php-redis
sudo systemctl enable --now redis-server
sudo systemctl status redis-server

狀態輸出應顯示服務已啟動。確認執行 Nextcloud 的 PHP 運行時可以載入 Redis 擴充功能。在標準安裝中,php -m | grep -i redis可以透過命令列介面 (CLI) 快速檢查,但 CLI PHP 和 Web PHP 可能使用不同的版本或設定檔。如果 Web 執行時期中缺少該模組,請安裝或啟用對應的軟體包,然後重新啟動 PHP-FPM 或 Web 伺服器。

Nextcloud 34.0.2 及更高版本還提供了一個捆綁的KeyValueCache後端,用於相容於 Redis 的儲存。它不需要 PHP Redis 擴充。當託管環境無法安裝 PHP 模組,但仍需要執行 Redis 或 Valkey 服務時,這非常有用。目前的Nextcloud 記憶體快取指南對這兩種方法都有詳細說明。請從下方選擇一種後端配置,而不是同時新增兩種配置。

步驟 3:在 Nextcloud 中設定鎖定

編輯目前啟動的配置config/config.php數組,並將選定的條目新增至現有$CONFIG數組。請保留 PHP 語法和逗號。不要建立第二個配置數組或重複鍵。除非您清楚為何需要更改,否則請保留所有現有的快取設定。

方案 A:使用 PHP Redis 擴充的 Redis

當 Web PHP 運行時環境phpredis安裝了受支援的擴充功能時,請使用此選項。監聽 6379 連接埠的本機 Redis 伺服器可以使用以下設定:

'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
    'host' => '127.0.0.1',
    'port' => 6379,
    'timeout' => 0.0,
],

如果 Redis 需要身份驗證,請設定正確的密碼config.php並保護檔案權限。不要將 Redis 公開。將其綁定到本地主機或受保護的私人網絡,並在適當情況下使用 Unix 套接字。

方案 B:使用 Redis 或 Valkey 的鍵值緩存

如果您的 Nextcloud 版本支援捆綁的 Redis 提供者,並且您不想安裝 PHP Redis 擴展,請使用此選項。對於監聽 6379 連接埠的本機服務,最小範例如下:

'memcache.locking' => '\OC\Memcache\KeyValueCache',
'memcache.kvstore' => [
    'server' => [
        'host' => '127.0.0.1',
        'port' => 6379,
    ],
],

如果您的服務使用了驗證、TLS、套接字、Sentinel 或叢集設置,請新增文件中記錄的相應設定。請勿從範例中複製憑證。有關詳細參數和支援的拓撲結構,請參閱官方快取配置參考文件。

步驟 4:檢查連接性和多伺服器設置

Nextcloud 必須能夠使用與服務相同的主機、連接埠、套接字和憑證存取已設定的快取伺服器。一個常見的錯誤是localhost在每個 Nextcloud Web 節點上都進行設置,而 Redis 卻只運行在一個獨立的主機上。在多伺服器部署中,應將所有 Web 節點配置為使用同一個 Redis 伺服器或叢集。限制對 Nextcloud 節點的網路訪問,並使用適當的身份驗證和防火牆規則保護 Redis。

對於 Unix 套接字,請確認 PHP/Web 伺服器帳號擁有對該套接字的讀寫權限。權限或群組變更因作業系統而異,因此請遵循 Redis/Valkey 和發行版文檔,而不是應用諸如全域可寫存取權限之類的寬泛權限。即使配置金鑰存在,連線拒絕、驗證錯誤或套接字權限錯誤也可能導致 Nextcloud 無法使用鎖定提供者。

步驟 5:重啟相關服務

儲存配置後,如果 Redis 服務的設定發生更改,請重新啟動 Redis 服務,然後重新啟動為 Nextcloud 提供服務的 PHP 執行時間。例如,Apache 安裝可能需要重新啟動 Apache 服務,而 PHP-FPM 安裝則需要重新啟動對應的 PHP-FPM 服務。在某些發行版中,服務名稱包含 PHP 版本號。對於容器環境,請透過部署支援的方法重新建立或重新啟動相關服務。避免在生產伺服器上盲目重啟不相關的服務。

如果 Nextcloud 傳回設定或語法錯誤,請還原備份並檢查是否有缺少逗號、引號不符、重複鍵或編輯錯誤等情況config.php。 PHP 陣列設定必須保留在現有配置結構中。

步驟 6:驗證設定並測試檔案操作

刷新管理員概覽並檢查事務文件鎖定警告是否已消失。如果您配置了本機快取但仍看到記憶體快取警告,請單獨檢查本機快取;Nextcloud 建議在許多單一伺服器部署中使用 APCu 進行本機緩存,而 Redis 則負責處理鎖定和分散式快取。請勿預設將 Redis 新增為本機緩存,尤其是在多伺服器設定中。

您也可以使用 Nextcloud 的命令列工具檢查有效的鎖定設定。請occ以 Web 伺服器帳戶身分從 Nextcloud 目錄執行該工具;在 Debian/Ubuntu 系統上,該帳戶通常為www-data:

sudo -u www-data php occ config:system:get memcache.locking

該值應與您選擇的後端相匹配,例如` \OC\Memcache\Redis/etc \OC\Memcache\KeyValueCache...

最後,上傳一個小的測試文件,重新命名,下載,並確認桌面或行動用戶端可以同步變更。這些檢查並不能模擬所有並發工作負載,但可以確認更改後常規檔案操作仍然有效。對於繁忙或叢集伺服器,請在正常使用期間監控 Nextcloud 日誌和 Redis/Valkey 的可用性。如果警告仍然存在,請驗證在使用選項 A 時 Web PHP 運行時是否具有擴展名,快取主機是否可訪問,憑證和套接字權限是否正確,以及所有節點是否共享相同的後端。

事務文件鎖定能做什麼,不能做什麼

事務鎖定有助於防止操作重疊時檔案損壞,處理中斷的事務,並協調涉及共用檔案和外部儲存的變更。它不會預留文件以供一人編輯,也不會顯示其他正在編輯的用戶,或合併同時進行的編輯。請將此警告視為伺服器設定問題,然後在後端配置完成後測試正常的上傳和同步功能。對於協作編輯,請使用專為共同創作而設計的應用程序,而不是依賴文件鎖定。

留下評論

修正 iPhone 上的 Zimbra ActiveSync 連線錯誤

修正 iPhone 上的 Zimbra ActiveSync 連線錯誤

透過檢查帳戶詳細資料、憑證、憑證、網路路徑和伺服器策略來排查 iPhone 上的 Zimbra ActiveSync 錯誤,並比較安全的替代方案。

ownCloud Infinite Scale 與 Nextcloud 28:效能與記憶體使用情況詳解

ownCloud Infinite Scale 與 Nextcloud 28:效能與記憶體使用情況詳解

從架構、效能表現、記憶體需求、快取、擴充和實際部署權衡等方面比較 ownCloud Infinite Scale 和 Nextcloud 28。

修正 Nextcloud “事務性檔案鎖定未設定”錯誤

修正 Nextcloud “事務性檔案鎖定未設定”錯誤

透過檢查部署、設定 Redis 或 KeyValueCache、重新啟動相關服務以及驗證檔案操作,修復 Nextcloud 的事務性檔案鎖定警告。

如何為 Zimbra 設定外部 LDAP 身份驗證

如何為 Zimbra 設定外部 LDAP 身份驗證

透過實際的 CLI 範例、TLS 指南、綁定 DN 和搜尋過濾器模式、驗證步驟和回滾檢查,為 Zimbra 設定外部 LDAP 驗證。

如何在 BigBlueButton 中設定自動錄製清理

如何在 BigBlueButton 中設定自動錄製清理

使用 cron 任務、保留規則、日誌和驗證功能,設定安全的 BigBlueButton 自動化錄製清理機制。比較原始資料清理和完整錄製刪除的效果。

如何透過 RTMP 設定 Jitsi Meet 直播到 YouTube

如何透過 RTMP 設定 Jitsi Meet 直播到 YouTube

比較 Jibri 和 OBS 在將 Jitsi Meet 直播到 YouTube 方面的效能,然後配置正確的路由,安全地使用您的直播金鑰,並驗證即時預覽。

BigBlueButton 與 Jitsi Meet:資源使用與功能矩陣

BigBlueButton 與 Jitsi Meet:資源使用與功能矩陣

透過記錄伺服器規模、記錄成本、教學工具、可擴展性以及選擇或調整自架部署規模的實用指標,比較 BigBlueButton 和 Jitsi Meet。

使用 OCC 修復 Nextcloud 維護模式卡住的問題

使用 OCC 修復 Nextcloud 維護模式卡住的問題

使用 OCC 安全地清除卡住的 Nextcloud 維護頁面,檢查升級是否未完成,並驗證實例是否已準備好供使用者使用。

修正 Zimbra 出站郵件延遲問題:“連線逾時,連接埠 25”

修正 Zimbra 出站郵件延遲問題:“連線逾時,連接埠 25”

診斷 Zimbra 出站郵件延遲錯誤(連接埠 25)。檢查佇列、MX DNS、防火牆、提供者阻止,並設定已核准的 SMTP 中繼。

如何在樹莓派 4 上使用 Conduit 設定 Matrix 伺服器

如何在樹莓派 4 上使用 Conduit 設定 Matrix 伺服器

在 Raspberry Pi 4 上建立一個輕量級的 Matrix 家庭伺服器,包含 Conduit、Docker、NGINX、HTTPS、註冊控制、聯合身份驗證和檢查功能。