使用 Systemd 定時器自動執行 Nextcloud Cron
檢查 Nextcloud 的 cron 模式,修復其 systemd 服務和計時器,並驗證後台作業在啟動後以及每隔五分鐘運行一次。
當 Nextcloud 的管理頁面顯示後台任務最近未執行時,清理、通知和其他排程任務可能會延遲執行。在 systemd 伺服器上,通常的解決方法是使用cron.phpweb 伺服器帳戶從 systemd 服務執行 Nextcloud,然後為該服務啟用計時器進行調度。 Nextcloud 目前的管理手冊提供了一個包含兩個單元的範例;其中的路徑和服務帳戶必須與您的實際安裝相符。
Nextcloud 後台任務會在cron.php呼叫時執行。 systemd服務定義了要執行的命令;定時器會按計劃啟動該服務。如果服務手動執行但定時器始終未觸發,則需要檢查定時器的啟動情況。如果定時器已觸發但服務運作失敗,則需要檢查其命令、PHP 環境和權限。
在編輯任何內容之前,請確認 Nextcloud 的實際目錄和 HTTP 使用者。本範例假設使用 `/usr/local/bin`/var/www/nextcloud和www-data`/usr/local/bin`,這在 Debian 和 Ubuntu 系統中很常見。在其他系統中,該帳戶可能是 ` /usr/local/bin` wwwrun、apache`/usr/local/bin` 或其他使用者。 Nextcloud 要求以 HTTP 使用者身分執行其命令列作業,以確保檔案所有權的一致性。請參閱Nextcloud occ 文件。
測試與 systemd 計劃使用的相同的 PHP 可執行檔和 cron 腳本:
sudo -u www-data /usr/bin/php -f /var/www/nextcloud/cron.php
請將帳戶、PHP 路徑和 Nextcloud 路徑替換為您的主機對應的路徑。如果命令報告 PHP 錯誤、缺少擴充功能、權限問題、處於維護模式或資料庫連線失敗,請先解決這些問題;計時器無法修復失敗的命令。
開啟「管理設定」→「基本設定」→「後台作業」 ,如果尚未選中,請選擇Cron 。您也可以從 Nextcloud 目錄執行此命令:
cd /var/www/nextcloud
sudo -E -u www-data php occ background:cron
cron.phpNextcloud 指出,如果從命令列執行腳本,則無需在管理設定中選擇 Cron ,因為腳本會自動設定模式。明確設定可以明確指定生產環境模式。 Nextcloud 建議在生產環境中使用系統 cron;其背景作業文件也介紹了 systemd 定時器作為備選調度器。
建立或更新/etc/systemd/system/nextcloudcron.service以下內容。請使用 PHP 的完整路徑,這樣 systemd 就不會依賴互動式 shell PATH。
[Unit]
Description=Nextcloud cron.php job
[Service]
User=www-data
ExecCondition=/usr/bin/php -f /var/www/nextcloud/occ status -e
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process
切換User到 Web 伺服器帳戶,並將兩個路徑都變更為相符的 PHP 和 Nextcloud 位置。此條件會檢查實例是否正常執行,然後再執行作業。如果條件不成立,systemd 可能會跳過該服務;在移除或變更此條件之前,請檢查 Nextcloud 是否處於維護模式並查看日誌。保留 `<command>` KillMode=process,因為 Nextcloud 的範例使用了它,這樣 cron 啟動的外部程式可以在 cron 進程退出後繼續執行。服務單元不需要 `<command>`[Install]部分。
創建/etc/systemd/system/nextcloudcron.timer。此計劃任務在啟動後五分鐘開始,然後在每次服務啟動後等待五分鐘:
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
[Timer]
OnBootSec=5 min
OnUnitActiveSec=5 min
Unit=nextcloudcron.service
[Install]
WantedBy=timers.target
重新載入 systemd 以便讀取單元文件,然後使用一條命令啟用並啟動計時器:
sudo systemctl daemon-reload
sudo systemctl enable --now nextcloudcron.timer
啟用後,計時器將在下次啟動時運行;--now啟用後,計時器將立即運作。請勿像啟用循環計時器那樣啟用此服務本身。計時器是 Nextcloud 的元件timers.target。 Nextcloud 的最新手冊解釋了這些間隔設定和所需的啟動指令;舊版的手冊中包含一個已過時的服務安裝部分,因此請參考目前元件的範例。
檢查計時器的狀態和下次計畫運行時間:
systemctl status nextcloudcron.timer
systemctl list-timers nextcloudcron.timer
計時器應顯示為等待或啟動狀態,清單應顯示下次啟動時間。然後檢查服務的最新運作:
systemctl status nextcloudcron.service
journalctl -u nextcloudcron.service --since today
即使每次服務運作都失敗,定時器仍可能處於活動狀態,因此請檢查所有單元。如果服務缺失或 systemd 拒絕該文件,請執行命令systemd-analyze verify /etc/systemd/system/nextcloudcron.service /etc/systemd/system/nextcloudcron.timer,修正報告的語法或路徑問題,然後重新載入 systemd。如果服務退出失敗,日誌輸出通常會指出無效的 PHP 路徑、錯誤的使用者、失敗的條件或 Nextcloud 執行階段錯誤。如果定時器沒有下次運行,請驗證定時器的確切檔案名,運行命令daemon-reload,並確認已啟用該定時器systemctl is-enabled nextcloudcron.timer。
下次定時器啟動後,請再次檢查 Nextcloud 背景作業的狀態。此時應顯示最近的執行時間,而不是過期警告。如果定時器和服務都報告運行成功,但管理頁面仍然顯示過期狀態,請檢查實例日誌和 Web 伺服器使用的 PHP 版本;命令列 PHP 版本可能與 Web 運行時版本不同。此設定適用於普通 Linux 主機上的 systemd 調度。容器化和專用設備安裝可能透過其自身的服務管理員管理 cron,因此請使用該平台支援的方法,而不是新增無法存取容器檔案的主機單元。
檢查 Nextcloud 的 cron 模式,修復其 systemd 服務和計時器,並驗證後台作業在啟動後以及每隔五分鐘運行一次。
啟用可靠的 Nextcloud 檔案鎖定,選擇適當的 Redis 或 Valkey 後端,並驗證警告是否清除,同時避免並發檔案變更的風險。
使用最新更新、HTTPS 和 HSTS、精確的反向代理信任以及針對公共伺服器的檢查,修復 Nextcloud 掃描中常見的錯誤。
為需要加密的儲存配置 Nextcloud SSE,保護加密金鑰,並在加密現有文件之前測量傳輸和 CPU 影響。
將 Nextcloud 的檔案搜尋連接到 Elasticsearch,索引文件內容,並選擇適合您的伺服器和安全需求的設定。
配置 Nextcloud 在規定的保留期後刪除已刪除的文件,可靠地安排後台作業,並避免執行清除所有使用者回收站的命令。
安全地執行 Nextcloud 的 OCC 修復程序,預覽資料庫更改,並檢查警告仍然存在的原因。
透過調整 PHP、Nginx 或 Apache、暫存和逾時設置,讓 Nextcloud 瀏覽器上傳更大的文件,並驗證是哪個限制阻止了文件上傳。
設定 Nextcloud 實際使用的 PHP 記憶體限制,重新啟動對應的服務,並在管理概覽中確認 512 MB 設定。
使用 Nextcloud 的 S3 後端,透過正確的端點、憑證、存取範圍和驗證步驟,掛載相容的物件儲存桶。