Jeśli strona administratora ownCloud zgłasza, że zadania w tle nie są uruchomione, czyszczenie kolejki i inne zaplanowane zadania mogą się opóźnić do momentu, aż ktoś odwiedzi witrynę. Na serwerze Linux zarządzanym przez systemd, skonfiguruj tryb zadań w tle ownCloud dla crona i użyj timera do uruchomienia occ system:cronz konta serwera WWW. Aktualna dokumentacja serwera ownCloud zaleca systemowego crona do regularnej pracy w tle, a timery systemd są dodatkowym sposobem planowania poleceń.
Ten przewodnik dotyczy serwera ownCloud Server Classic zainstalowanego bezpośrednio na hoście Linux. Nie dotyczy on serwera ownCloud Infinite Scale, który ma inną architekturę, ani oficjalnego obrazu ownCloud Docker, który wewnętrznie uruchamia cron. W przypadku Dockera należy postępować zgodnie z udokumentowanymi ustawieniami obrazu zamiast tworzyć drugi timer hosta. Zapoznaj się z aktualną dokumentacją zadań w tle serwera ownCloud .
Sprawdź polecenie przed zmianą harmonogramu
Usługa systemd definiuje polecenie do wykonania; timer okresowo uruchamia tę usługę. Najpierw sprawdź ścieżkę instalacji ownCloud i konto serwera HTTP. Poniższe przykłady używają /var/www/owncloudi www-data, powszechnie używanych w Debianie i Ubuntu. Inne dystrybucje Linuksa mogą używać wwwrun, apachelub innego konta.
Aby odróżnić uszkodzone polecenie od uszkodzonego harmonogramu, uruchom polecenie ownCloud ręcznie z poziomu tego konta:
sudo -u www-data /usr/bin/php -f /var/www/owncloud/occ system:cron
Zmień plik wykonywalny PHP i ścieżkę na occdostosowaną do serwera. Firma ownCloud zaleca używanie system:crontej opcji do zadań w tle; stare przewodniki dotyczące harmonogramu cron.phpmogą odnosić się do przestarzałych rozwiązań. Bieżące polecenie może zakończyć się bez wyświetlenia komunikatu o powodzeniu, dlatego sprawdź jego status wyjścia, używając komendy echo $?„:” 0, która oznacza, że polecenie zakończyło się pomyślnie. Jeśli zwróci błąd, najpierw popraw ścieżkę, instalację PHP CLI, uprawnienia, połączenie z bazą danych lub błąd ownCloud. Jeśli pominiesz to sprawdzanie, timer będzie wielokrotnie uruchamiał to samo polecenie, które zakończyło się niepowodzeniem.
Ustaw ownCloud w tryb Cron
W ustawieniach administratora ownCloud otwórz sekcję „background-jobs” lub „Cron” i wybierz „Cron” . Możesz również ustawić harmonogram z poziomu katalogu instalacyjnego za pomocą:
cd /var/www/owncloud
sudo -E -u www-data php occ background:cron
Wybiera tryb crona; zaplanowane polecenie pozostaje aktywne occ system:cron. W podręczniku ownCloud podano, że to polecenie jest równoważne wybraniu opcji cron na stronie administratora. Cron jest preferowany w przypadku serwera, który musi niezawodnie przetwarzać zadania, ponieważ AJAX zależy od odwiedzin stron i może pozostawiać zadania oczekujące w okresach przestoju. W przypadku małej, prywatnej instancji AJAX może być łatwiejszy w użyciu, ale jest mniej przewidywalny.
Utwórz usługę systemd i timer
Utwórz /etc/systemd/system/owncloudcron.serviceprzy użyciu swojego rzeczywistego konta HTTP i ścieżki 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=oneshotInformuje systemd, że polecenie zostanie wykonane do końca, a następnie zakończone. Podanie pełnej ścieżki PHP pozwala uniknąć zależności od ograniczonej PATHliczby usług systemowych. Katalog roboczy pomaga ownCloud w rozwiązywaniu ścieżek względnych. Utrzymuj konto usługi w zgodności z właścicielem plików i dostępu do danych ownCloud. Nie uruchamiaj zadania jako root.
Następnie utwórz /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
Podręcznik ownCloud zaleca 15-minutowy rytm dla standardowego przykładu crona i uznaje timery systemd za alternatywny harmonogram. Ten timer uruchamia się pięć minut po uruchomieniu, a następnie planuje kolejne uruchomienia 15 minut po aktywacji usługi. Jeśli obciążenie wymaga innego interwału, należy go OnUnitActiveSecświadomie zmienić i uwzględnić czas potrzebny na zakończenie każdego uruchomienia. Unikaj konfigurowania kolejnego wpisu crontab dla tego samego polecenia; zduplikowane harmonogramy mogą uruchamiać powtarzające się uruchomienia i utrudniać rozwiązywanie problemów.
Poleć systemd, aby przeładował definicje jednostek, a następnie włącz i uruchom timer:
sudo systemctl daemon-reload
sudo systemctl enable --now owncloudcron.timer
daemon-reloadJest wymagany po utworzeniu lub edycji plików jednostki. Włączenie timera powoduje automatyczne uruchomienie jednostki po kolejnych uruchomieniach i --nowuruchamia ją w bieżącej sesji. Włącz jednostkę timera, a nie tylko usługę.
Znajdź przyczynę pominięcia lub niepowodzenia przebiegu
Sprawdź, czy timer jest włączony i kiedy zostanie uruchomiony:
systemctl is-enabled owncloudcron.timer
systemctl list-timers --all owncloudcron.timer
systemctl status owncloudcron.timer
Włączony licznik powinien pojawić się na liście liczników przy następnej aktywacji. Jeśli tak się nie stanie, sprawdź nazwę pliku jednostki, przeładuj systemd i ponownie włącz licznik. Jeśli licznik wskazuje uruchomienie, ale działanie ownCloud nadal jest opóźnione, sprawdź usługę i jej logi:
systemctl status owncloudcron.service
sudo journalctl -u owncloudcron.service --since today
Sprawdź, czy ścieżka jest nieprawidłowa, katalog danych jest niedostępny, brakuje rozszerzenia PHP lub czy nie występuje błąd bazy danych. Przetestuj ręcznie dokładne polecenie w pliku usługi, aby www-datajak najwierniej odtworzyć środowisko. Sprawdź również, czy użyłeś polecenia ownCloud occ system:cron, a nie kopiowałeś przykładu z NextCloud, który wywołuje polecenie cron.php.
Sprawdź, czy ownCloud przetwarza zadania
Po jednym lub dwóch interwałach czasowych sprawdź, czy usługa zakończyła się pomyślnie i czy timer ma zaplanowaną późniejszą aktywację. Następnie sprawdź status zadania w tle na stronie administratora ownCloud. Wyświetlany czas ostatniego uruchomienia powinien się zwiększyć, a nieaktualne ostrzeżenie cron powinno zniknąć. Jeśli systemd zgłasza powodzenie, ale ostrzeżenie nadal występuje, sprawdź dziennik aplikacji ownCloud i sprawdź, czy interfejs użytkownika web jest połączony z tą samą instancją i bazą danych, z których korzysta instalacja wiersza poleceń.
W przypadku oficjalnych kontenerów ownCloud nie należy instalować tych jednostek hosta, chyba że celowo wyłączono wewnętrzny harmonogram kontenera, a aktualna dokumentacja kontenerów ownCloud obsługuje tę konfigurację. Przedstawiona konfiguracja to rozwiązanie na poziomie hosta dla klasycznego ownCloud w systemie systemd; nazwy usług, ścieżki, wersje PHP i zachowanie kontenera zależą od wdrożenia.