使用 Systemd 定時器可靠地執行 ownCloud 後台作業
將按需作業運行替換為 systemd 定時器,該定時器每 15 分鐘執行一次 ownCloud 支援的 occ system:cron 命令。
如果 ownCloud 的管理頁面顯示後台任務未運行,則排隊的清理和其他排程任務可能會延遲,直到有人造訪該網站。在由 systemd 管理的 Linux 伺服器上,請為 Cron 設定 ownCloud 後台任務模式,並使用定時器occ system:cron以 Web 伺服器帳戶執行。目前的 ownCloud 伺服器文件建議使用系統 cron 來執行常規後台任務,並特別指出 systemd 定時器是另一種調度命令的方法。
本指南適用於直接安裝在 Linux 主機上的 ownCloud Server Classic。它不適用於架構不同的 ownCloud Infinite Scale,也不適用於已在內部執行 cron 的官方 ownCloud Docker 映像。對於 Docker,請按照映像文件中的設定進行操作,而無需建立第二個主機定時器。請參閱最新的ownCloud Server 後台作業文件。
systemd服務定義了要執行的命令;定時器會定期啟動該服務。首先確認 ownCloud 的安裝路徑和 HTTP 伺服器帳戶。以下範例使用 `/usr/local/bin` 和 `/usr/local/bin` /var/www/owncloud,www-data這在 Debian 和 Ubuntu 上很常見。其他 Linux 發行版可能使用 `/usr/local/bin`、`/usr/local/bin`wwwrun或apache其他帳號。
使用此帳戶手動執行 ownCloud 命令,以區分命令故障和排程任務故障:
sudo -u www-data /usr/bin/php -f /var/www/owncloud/occ system:cron
請將 PHP 可執行檔及其路徑變更為occ與您的伺服器相符。 ownCloud 建議使用system:cron後台作業;舊版指南中cron.php關於定時任務的說明可能與舊版行為有所不同。當前命令可能在未列印成功訊息的情況下完成,因此請在echo $?執行命令後立即檢查其退出狀態:0如果返回成功,則表示命令已成功退出。如果傳回錯誤,請先修復路徑、PHP CLI 安裝、權限、資料庫連線或 ownCloud 錯誤。如果您跳過此檢查,計時器將重複執行相同的失敗命令。
在 ownCloud 的管理員設定中,開啟後台任務或 Cron 部分,然後選擇Cron。您也可以從安裝目錄設定排程器:
cd /var/www/owncloud
sudo -E -u www-data php occ background:cron
此操作會選擇 Cron 模式;計劃任務將保持不變occ system:cron。 ownCloud 手冊指出,此指令等效於在管理頁面中選擇 Cron。對於必須可靠處理任務的伺服器而言,Cron 是更佳選擇,因為 AJAX 依賴頁面訪問量,在訪問量較低的時段可能會導致任務等待。對於小型個人實例,AJAX 可能更容易使用,但其穩定性較差。
/etc/systemd/system/owncloudcron.service使用您的實際 HTTP 帳戶和 ownCloud 路徑建立:
[Unit]
Description=ownCloud background jobs
[Service]
Type=oneshot
User=www-data
WorkingDirectory=/var/www/owncloud
ExecStart=/usr/bin/php -f /var/www/owncloud/occ system:cron
Type=oneshot告訴 systemd 指令運行完畢後退出。提供完整的 PHP 路徑可以避免依賴PATH系統服務有限的資源。工作目錄有助於 ownCloud 解析相對路徑。請確保服務帳戶與 ownCloud 檔案和資料存取權限的擁有者一致。請勿以 root 使用者身分執行此作業。
接下來,創建/etc/systemd/system/owncloudcron.timer:
[Unit]
Description=Run ownCloud background jobs every 15 minutes
[Timer]
OnBootSec=5min
OnUnitActiveSec=15min
Unit=owncloudcron.service
[Install]
WantedBy=timers.target
ownCloud 手冊建議其標準 cron 範例的運行頻率為 15 分鐘,並認可 systemd 定時器作為替代調度器。此定時器會在啟動後 5 分鐘啟動,並在服務啟動後 15 分鐘再次運作。如果您的工作負載需要其他間隔,請OnUnitActiveSec謹慎更改,並考慮每次運行所需的完成時間。避免為相同指令配置多個 crontab 條目;重複的調度器可能會啟動冗餘運行,從而增加故障排除的難度。
告訴 systemd 重新載入其單元定義,然後啟用並啟動計時器:
sudo systemctl daemon-reload
sudo systemctl enable --now owncloudcron.timer
daemon-reload建立或編輯單元檔案後需要執行此操作。啟用定時器後,它將在下次啟動後自動運行;--now在當前會話中啟動。請啟用定時器單元,而不僅僅是服務。
檢查定時器是否已啟用以及下次運轉時間:
systemctl is-enabled owncloudcron.timer
systemctl list-timers --all owncloudcron.timer
systemctl status owncloudcron.timer
已啟用的定時器應在下次啟動時出現在定時器清單中。如果未出現,請確認單元檔案名,重新載入 systemd,然後再次啟用計時器。如果定時器顯示運行,但 ownCloud 工作仍然延遲,請檢查服務及其日誌:
systemctl status owncloudcron.service
sudo journalctl -u owncloudcron.service --since today
尋找錯誤路徑、無法存取的資料目錄、缺少 PHP 擴充功能或資料庫錯誤。手動測試服務文件中的確切命令,以www-data盡可能重現環境。此外,請確認您使用的是 ownCloud 命令occ system:cron,而不是複製呼叫 Nextcloud 範例的命令cron.php。
經過一到兩個定時器間隔後,確認服務已成功完成,且定時器已安排後續啟動。然後,在 ownCloud 管理頁面檢查後台作業狀態。顯示的上次運行時間應該有所更新,並且過期的 Cron 警告應該會消失。如果 systemd 報告成功但警告仍然存在,請檢查 ownCloud 的應用程式日誌,並確認 Web UI 是否連接到與命令列安裝相同的實例和資料庫。
對於官方的 ownCloud 容器,除非您已有意停用容器的內部調度器,並且 ownCloud 目前的容器文件支援您的配置,否則請勿安裝這些主機單元。此處的配置是針對 systemd 上經典 ownCloud 的主機級解決方案;服務名稱、路徑、PHP 版本和容器行為取決於特定的部署方式。
將按需作業運行替換為 systemd 定時器,該定時器每 15 分鐘執行一次 ownCloud 支援的 occ system:cron 命令。
透過 Apache、Nginx 或反向代理程式追蹤 WebDAV 請求,然後使用經過驗證的 PROPFIND 測試確認 ownCloud 同步功能正常。
透過設定其規範 URL 並從伺服器本身檢查 DNS、HTTPS 和反向代理路由,修復 Nextcloud 缺少出站位址警告的問題。
透過本機 Unix 套接字配置 APCu 和 Redis,以實現 Nextcloud 快取和檔案鎖定,並提供目前和舊版 Nextcloud 的步驟。
檢查 Nextcloud 的 cron 模式,修復其 systemd 服務和計時器,並驗證後台作業在啟動後以及每隔五分鐘運行一次。
啟用可靠的 Nextcloud 檔案鎖定,選擇適當的 Redis 或 Valkey 後端,並驗證警告是否清除,同時避免並發檔案變更的風險。
使用最新更新、HTTPS 和 HSTS、精確的反向代理信任以及針對公共伺服器的檢查,修復 Nextcloud 掃描中常見的錯誤。
為需要加密的儲存配置 Nextcloud SSE,保護加密金鑰,並在加密現有文件之前測量傳輸和 CPU 影響。
將 Nextcloud 的檔案搜尋連接到 Elasticsearch,索引文件內容,並選擇適合您的伺服器和安全需求的設定。
配置 Nextcloud 在規定的保留期後刪除已刪除的文件,可靠地安排後台作業,並避免執行清除所有使用者回收站的命令。