[php][MySQL] Duże zadanie w CRONIE podzielone na cześci |
[php][MySQL] Duże zadanie w CRONIE podzielone na cześci |
10.03.2020, 12:36:20
Post
#1
|
|
Grupa: Zarejestrowani Postów: 190 Pomógł: 0 Dołączył: 25.11.2015 Ostrzeżenie: (0%) |
Potrzebuje przetworzyć duży plik xml.
Wykonuje go przeważnie w paczkach po 5000 pozycji w pętli skrypt uruchamiam 5-6 razy. żeby cały plik przerobić. . Obecnie robie to tak, że skrypt uruchamiam przez przeglądarkę z parametrem "odswiezaj": www.domena.pl/skrypt.php?odswiezaj=30
I teraz pytanie. Wywołuje skrypt w CRON wtedy ta operacja odświeżania nie funkcjonuje. Zamiast tego kolejne wywołanie zrobić za pomoca kolejnego wywołania crona czy na końcu wywołania przekierowanie header("Location: skrypt.php"); które wywołą jeszcze raz ten skrypt. ? Jak wykonuje się takie operacje cykliczne na CRONIE niestety nie mam w tym doświadczenia. Problemem jest, że skrypt będzie się cały czas wykonywał, a potrzebuje raz na dwa dni max. Jednak wywołań będzie z 5-6 więc jedno uruchomienie skryptu raczej odpada. Ten post edytował luis2luis 10.03.2020, 13:47:48 |
|
|
10.03.2020, 15:53:00
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) |
Jest dużo możliwych rozwiązań, np:
1. Uruchom w cron curl/wget tego skryptu przeglądarkowego. 2. Wyłącz limit pamięci i uruchom raz w cron. 3. Nie wczytuj całego pliku tylko obsługuj go strumieniowo (o ile struktura pozwala). 4. Uruchom w cron skrypt, wylicz ile jest iteracji do wykonania i ze skryptu głównego uruchamiaj wątki dla każdej iteracji. 5. Uruchamiaj skrypt w cronie co zadany czas, w skrypcie sprawdzaj czy jest aktualnie uruchomiony (jeśli tak to nie kontynuuj), na zakończenie zapisuj w którym momencie skrypt przestał przerabiać dane - przy kolejnym uruchomieniu wystartuj od tego momentu. -------------------- |
|
|
11.03.2020, 22:11:02
Post
#3
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Jak duży plik?
|
|
|
12.03.2020, 17:14:40
Post
#4
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 27.10.2015 Ostrzeżenie: (0%) |
Wygląda na mały 5k*6 razy w pętli obrabiany
|
|
|
12.03.2020, 20:48:26
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
To nie jest odpowiedź. bo 20 zpozycji może ważyć 10GB a 10000 pozycji 10MB więc ilośc pozycji to nie wyznacznik.
Powiem generalnie tak. Jeśli to ma być odpalane cyklicznie co jakiś czas i plik nie waży powiedzmy więcej niż 200MB to puściłbym to za jednym przebiegiem w cronie w nocy i sobie głowy nie zawracał. Pomieli 2h ale zrobi. |
|
|
12.03.2020, 21:09:12
Post
#6
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 27.10.2015 Ostrzeżenie: (0%) |
jakby dał ten plik do ściągnięcia to byśmy popatrzyli, a tak możemy sobie wróżyć.
|
|
|
16.03.2020, 15:39:46
Post
#7
|
|
Grupa: Zarejestrowani Postów: 531 Pomógł: 55 Dołączył: 3.01.2016 Skąd: Łowicz Ostrzeżenie: (0%) |
I teraz pytanie. Wywołuje skrypt w CRON wtedy ta operacja odświeżania nie funkcjonuje. Wyrzuć z pliku kod HTML, zostaw tylko kod PHP odpowiedzialny za operacje na pliku XML w CRON ustaw sobie 6 wywołań w odstępie 30 minut co 2 dni, od 00 do 6:00 Cytat */30 0-6 */2 * * Inne parametru CRON jak nie masz doświadczenia ustawisz sobie raczej bez problemu tu https://crontab.guru/ Ten post edytował LowiczakPL 16.03.2020, 15:41:29 -------------------- Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
|
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 07:24 |