Cron - zasada działania

9.0.x
9.1.x
webserver_issue

#1

Witam

Staram się zrozumieć zasadę działania cron'a. W chwili obecnej używam wariantu "ajax". O ile mi wiadomo, jedno zadanie jest wykonane na jedno wywołanie strony. Przeglądałem zawartość bazy i zauważyłem, że tabela oc_jobs rozrosła się do kilkudziesięciu tysięcy rekordów.

  1. Czy przechodzenie miedzy katalogami lub zakładkami webpanelu też inicjuje takie zadanie (ajax) ?
  2. Czy wywołanie strony z zalogowanym uzytkownikiem pobudza wywołanie zadań w obrebie całego systemu czy też jedynie tego konkretnego użytkownika ?
  3. Czy jednocześnie, mogę dopisać do crontab serwera, wywołanie cron.php tak by współpracowało z ajax ?
  4. Jakie właściwie zadania sa wykonywane w ramach tego mechanizmu ? Mam obszerna bazę plików z kilkoma użytkownikami i zastanawiam się czy interwał 15 min jest wystarczający.
  5. Użytkownicy nie loguj się poprzez webpanel. Używaj jedynie windowsowego clienta - czy w przypadku ajax w takiej sytuacji aplikacja-client pobudza zadania crona ?

Konserwacja - czyszczenie bazy danych
#2

Czy przechodzenie miedzy katalogami lub zakładkami webpanelu też inicjuje takie zadanie (ajax) ?
Czy wywołanie strony z zalogowanym uzytkownikiem pobudza wywołanie zadań w obrebie całego systemu czy też jedynie tego konkretnego użytkownika ?
Tutaj maszreferencje backgroud jobs

Czy jednocześnie, mogę dopisać do crontab serwera, wywołanie cron.php tak by współpracowało z ajax ?
Zmien na ostatnia opcje i wtedy cron bedzie odpalal sie w interwalach i sprawdzal po timestampach ktore zadania potrzebuje odpalic

Jakie właściwie zadania sa wykonywane w ramach tego mechanizmu ? Mam obszerna bazę plików z kilkoma użytkownikami i zastanawiam się czy interwał 15 min jest wystarczający.
Czas wykonania jest zalezny od specyfiki twojego systemu. Background jobs sa dyktowane poprzez tz. timestampy w bazie danych, tabela oc_jobs. Jesli wyczyscisz timestamp i odpalisz cron.php, odpalisz zadania ktore potrzebujesz i mozesz zobaczyc ile zajmuja u Ciebie. np:

mysql --user="$dbuser" --password="$dbpass" --execute="use $database; update oc_jobs SET last_run=0 where class='OCA\\Files\\BackgroundJob\\CleanupFileLocks'; "
cd $ocpath && sudo -u www-data php cron.php

Użytkownicy nie loguj się poprzez webpanel. Używaj jedynie windowsowego clienta - czy w przypadku ajax w takiej sytuacji aplikacja-client pobudza zadania crona ?
Zadania cron sa wylacznie system-wide, client nigdy nie pobudza crona.


#3

Dziękuję za odpowiedź.
Właściwie, informacja na ostatnie pytanie jest dla mnie podpowiedzią jakie rozwiązanie powinienem zastosować. Zdecyduję się na cron:cron'a. Zastosowanie dotychczasowego cron:ajax tłumaczyłoby dlaczego z biegiem czasu tabela oc_jobs w bazie danych napuchła do granic absurdu - brak aktywności na www.


#4

Jesli masz duzo zadan ktore nigdy nie zostaly wykonane, najlepsza rekomendacja jest oczywiscie ich odpalenie. Mozesz jednak zrobic cos takiego:

DELETE FROM `oc_jobs` WHERE `oc_jobs`.`last_run` = 0;

Aktywnosc uzytkownikow itp. pozniej odtworzy te zadania i zostana odpalone w przyszlosci przez kolejny cron.php