Aby zadania w tle Nextcloud były uruchamiane automatycznie przez systemd, należy skonfigurować usługę jednorazową, która działa cron.phpjako użytkownik serwera WWW, a następnie włączyć timer, który uruchamia tę usługę co pięć minut. Kluczowe kontrole to: timer jest włączony i ma ustawiony czas następnego uruchomienia, usługa wskazuje prawidłowe ścieżki Nextcloud i PHP oraz dziennik usług informuje o pomyślnym zakończeniu. Usługa jednorazowa może wyświetlać stan „nieaktywna” między uruchomieniami; może to być normalne po jej zakończeniu.
Ta konfiguracja dotyczy konwencjonalnej instalacji Nextcloud w systemie Ubuntu z użyciem systemd, z plikami Nextcloud dostępnymi na hoście. Jeśli Nextcloud działa w Dockerze, Snapie lub urządzeniu, takim jak Nextcloud All-in-One, należy użyć udokumentowanej metody harmonogramu danej dystrybucji zamiast kierować jednostkę hosta na ścieżkę wyłącznie do kontenera. W poniższych przykładach użyto symboli /var/www/nextcloudi www-data; zamiast nich należy użyć rzeczywistej ścieżki instalacji i użytkownika HTTP na serwerze.
Co powinien osiągnąć timer
Nextcloud cron.phpuruchamia zadania w tle, takie jak konserwacja i zadania aplikacji, w kolejce. Timer systemd to zegar; usługa to polecenie uruchamiane po upływie czasu. Potrzebne są oba. Utworzenie plików bez włączenia timera powoduje, że harmonogram pozostaje nieaktywny, a włączenie timera wskazującego na niewłaściwą ścieżkę PHP lub Nextcloud może powodować powtarzające się nieudane uruchomienia.
Nextcloud zaleca system cron do zadań produkcyjnych w tle. Aktualny podręcznik administratora dokumentuje również timery systemd jako alternatywę. Przykładowy harmonogram uruchamia się pięć minut po uruchomieniu, a następnie planuje kolejne uruchomienie pięć minut po każdej aktywacji usługi. Pozwala to uniknąć konieczności odwiedzania interfejsu webowego przez użytkownika.
1. Potwierdź ścieżkę instalacji, użytkownika i interfejs wiersza poleceń PHP
Przed edycją jednostek zlokalizuj rzeczywisty katalog Nextcloud i sprawdź, jakiego polecenia PHP oczekuje instalacja serwera WWW. W typowej instalacji archiwum Ubuntu ścieżka może być /var/www/nextcloud, użytkownik WWW to często www-data, a PHP CLI to /usr/bin/php. Sprawdź zamiast zakładać:
ls -l /var/www/nextcloud/cron.php
command -v php
php -v
Jeśli katalog Nextcloud znajduje się gdzie indziej, zastąp go w obu poniższych poleceniach jednostki. Jeśli serwer WWW korzysta z oddzielnej wersji PHP, użyj pliku wykonywalnego CLI tej wersji w ExecStarti ExecCondition. Usługa systemd nie dziedziczy zmiennej środowiskowej PATH ani środowiska powłoki interaktywnej, więc jawne ścieżki są bardziej niezawodne.
Przetestuj sprawdzanie statusu przy użyciu tego samego użytkownika, którego będzie używał systemd:
sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ status -e
Polecenie Nextcloud occpowinno zostać uruchomione jako użytkownik HTTP, aby zachować poprawną własność i uprawnienia pliku. Jeśli ten test zgłosi błąd PHP, tryb konserwacji lub brakujący plik, należy to najpierw naprawić; timer nie jest w stanie zrekompensować nieudanego polecenia Nextcloud.
2. Utwórz usługę jednorazową
Tworzyć /etc/systemd/system/nextcloudcron.service:
sudo nano /etc/systemd/system/nextcloudcron.service
Wprowadź tę jednostkę, dostosowując ścieżkę i użytkownika, jeśli Twoja instalacja jest inna:
[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
ExecConditionSprawdza, czy Nextcloud działa prawidłowo przed uruchomieniem zadania w tle. Jeśli warunek nie zostanie spełniony, systemd pomija uruchomienie; sprawdź dziennik, aby dowiedzieć się, dlaczego. KillMode=processUmożliwia zewnętrznym programom uruchomionym przez zadanie w tle kontynuowanie działania po zakończeniu głównego procesu cron. Obecny przykład Nextcloud nie wymaga sekcji [Install]w tym pliku usługi.
Użycie /usr/bin/phpjest właściwe tylko wtedy, gdy na serwerze znajduje się właściwy interpreter CLI. Na przykład, niestandardowe repozytorium PHP może zainstalować wersjonowany plik binarny. Użyj tej samej kompatybilnej wersji PHP, której wymaga NextCloud i która jest używana w konfiguracji serwera WWW.
3. Utwórz timer
Tworzyć /etc/systemd/system/nextcloudcron.timer:
sudo nano /etc/systemd/system/nextcloudcron.timer
Dodać:
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
[Timer]
OnBootSec=5 min
OnUnitActiveSec=5 min
Unit=nextcloudcron.service
[Install]
WantedBy=timers.target
OnBootSecPlanuje pierwsze uruchomienie pięć minut po uruchomieniu systemu systemd. OnUnitActiveSecPlanuje kolejne uruchomienie pięć minut po ostatniej aktywacji usługi. Timer nie jest tym samym co usługa: włącz i uruchom urządzenie .timer, aby harmonogram uruchomił się automatycznie.
4. Przeładuj systemd i włącz timer
Poproś systemd o odczytanie nowych plików jednostek, a następnie włącz i uruchom timer jednym poleceniem:
sudo systemctl daemon-reload
sudo systemctl enable --now nextcloudcron.timer
Sprawdź licznik:
systemctl status nextcloudcron.timer
systemctl list-timers --all | grep nextcloudcron
Timer powinien być załadowany i aktywny, a list-timersw polu NEXT powinien wskazywać przyszły czas. Jeśli jest wyłączony, nie jest załadowany lub nie ma kolejnej aktywacji, sprawdź, czy nazwa pliku kończy się na .timer, [Install]sekcja zawiera , a po zapisaniu plików WantedBy=timers.targetzostał uruchomiony .daemon-reload
5. Uruchom jeden test i sprawdź jego wynik
Usługę można uruchomić jednorazowo, nie czekając na kolejny sygnał zegara:
sudo systemctl start nextcloudcron.service
sudo systemctl status nextcloudcron.service
sudo journalctl -u nextcloudcron.service -n 50 --no-pager
Sprawdź wynik usługi oraz wszelkie błędy PHP lub NextCloud. Po zakończeniu polecenia nextcloudcron.servicemożna powrócić do [ inactive (dead)brakuje informacji o błędzie], ponieważ jest to zadanie jednorazowe. Samo to nie oznacza, że się nie powiodło. Timer powinien pozostać aktywny i zaplanować kolejne uruchomienie; dziennik powinien wskazywać, czy poprzednie uruchomienie zakończyło się pomyślnie.
W ustawieniach administracji Nextcloud otwórz obszar stanu zadania w tle i sprawdź, czy czas ostatniego wykonania zadania jest przyspieszony po uruchomieniu timera. Ostrzeżenie powinno zniknąć, gdy Nextcloud wykryje ostatnią aktywność w tle. Odczekaj co najmniej jeden interwał po włączeniu timera, zanim uznasz, że harmonogram nie został uruchomiony.
Zdiagnozuj typowe wzorce awarii
| Co widzisz | Co sprawdzić | Następny krok |
| Timer jest „nieaktywny” lub wyłączony | Czy jednostka timera została włączona i uruchomiona | Uruchom sudo systemctl enable --now nextcloudcron.timer, a następnie sprawdźsystemctl list-timers |
| Timer jest aktywny, ale usługa nie działa | Dziennik usług, plik wykonywalny PHP, ścieżka Nextcloud i użytkownik usługi | Uruchom test statusu jako www-data; napraw pierwszy zgłoszony błąd PHP lub błąd uprawnień pliku |
| Usługa jest nieaktywna pomiędzy uruchomieniami | Czas NEXT timera i ostatni wpis w dzienniku usługi | Jeśli usługa zakończyła się pomyślnie, a licznik czasu pozostaje aktywny, jest to normalne w przypadku jednostki jednorazowej |
Usługa kończy działanie bez uruchomieniacron.php | Wynik ExecConditioni informacja, czy NextCloud znajduje się w trybie konserwacji | Rozwiąż problem z warunkiem i sprawdź stan Nextcloud przed ponownym ręcznym uruchomieniem zadania |
| Strona administratora nadal informuje, że cron nie został uruchomiony | Czy usługa rzeczywiście wywołuje prawidłową instancję i czy zmienia się jej ostatni czas wykonania | Odczekaj określony interwał, sprawdź dzienniki i upewnij się, że sprawdzasz tę samą instalację Nextcloud |
Aby uzyskać więcej szczegółów, przejrzyj najnowsze dzienniki usług i plik dziennika Nextcloud:
sudo journalctl -u nextcloudcron.service --since "30 minutes ago" --no-pager
sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ background-job:list
Lista zadań pokazuje zarejestrowaną pracę, ale sama w sobie nie stanowi dowodu na to, że timer jest wykonywany. Użyj razem czasu ostatniej i następnej aktywacji timera, dziennika usług oraz wskaźnika ostatniego uruchomienia Nextcloud.
Kiedy używać innego harmonogramu
Timery Systemd działają dobrze, gdy serwer korzysta z Systemd i chcesz mieć lokalny harmonogram zarządzany przez usługę. Jeśli korzystasz już ze standardowego demona cron i możesz zweryfikować jego plik crontab, obsługiwany jest również wpis systemowy cron, który wywołuje to samo cron.php. www-dataNie planuj obu metod dla tej samej instancji Nextcloud; nakładające się wywołania mogą marnować zasoby i komplikować rozwiązywanie problemów.
Harmonogramowanie AJAX zależy od użytkowników odwiedzających Nextcloud i jest mniej niezawodne w przypadku serwera obciążonego ruchem lub obsługującego wielu użytkowników. Webcron wywołuje połączenia cron.phpprzez HTTP i może być odpowiedni w przypadku bardzo małych instancji, w których dostęp do systemu jest niedostępny, ale Nextcloud zauważa, że wykonywanie zadań w sieci ogranicza ilość pracy, jaką można wykonać w ramach jednego wywołania. Jeśli Nextcloud jest konteneryzowany lub zarządzany przez urządzenie, należy użyć obsługiwanego harmonogramu lub konfiguracji kontenera; usługa hosta korzystająca z tej funkcji /var/www/nextcloudnie będzie działać, jeśli ta ścieżka nie jest obecna na hoście.
Prawidłowa konfiguracja ma włączony timer z cyklicznym czasem NEXT, uruchomienia usług, które kończą się bez błędów PHP, oraz czas ostatniego uruchomienia Nextcloud, który przesuwa się do przodu. Jeśli wszystkie trzy warunki są spełnione, ale dane zadanie aplikacji nadal wydaje się opóźnione, harmonogram może działać, podczas gdy zadanie oczekuje na własny harmonogram, okno konserwacji lub warunki kolejki. Przed zmianą interwału timera należy zdiagnozować to zadanie oddzielnie.
Oficjalne referencje