Autor Zpráva
jtfcobra
Profil
Spouštění PHP scriptu postupně časově poradíte

chtěl bych mít soubor automat.php


a ten bude spoštět

cron1.php
počká 60 sekund az se vykona
dale cron2.php
počká 60 sekund nez se vykona
atd...?
Keeehi
Profil
jtfcobra:
Cron se dá nastavit, aby spouštěl scripty v minutových intervalech. Možná chceš ale něco jiného, tak to zkus lépe popsat.
jtfcobra
Profil
No ja mam 5 minutové...

chtěl bych mít jeden PHP co mi spustit postupně všechny crony a těch mám asi 10
Keeehi
Profil
Takže předpokládám, že jde o nějaký hosting takže nemáte ani možnost posílat příkazy opračnímu systému.

verze 1 (synchronní)
$scripts = array('cron1.php', 'cron2.php', 'cron3.php', 'cron4.php');
foreach($scripts as $script) {
    include($script);
    sleep(60);
}

verze 2 (asynchronní)
$scripts = array('cron1.php', 'cron2.php', 'cron3.php', 'cron4.php');
foreach($scripts as $script) {
    file_get_contents("http://example.com/$script");
    sleep(60);
}

Mají různé výhody a nevýhody.
1 - když nastane problém v jednom scriptu, následující scripty se nemusejí vykonat; čas běhu dílčích scriptů se sčítá
2 - soubory musejí být přístupné z internetu, dají se zavést ochrany proti nechtěnému spuštěí ale nemusejí být stoprocentní, ale teba to nevadí; Je potřeba už na začátku každého spouštěného scriptu ukončit jeho výstup, aby na něj hlavní script nemusel čekat.
- v takto jednoduché verzi se neměří doba běhu jednotlivých scriptů,takže to nemusí být spouštěné každou minutu, ale každou minutu + něco málo navíc. Hlavně u verze 1.
Juraj Hajdúch
Profil
Jak psal Keeehi v bodu 1 by to jistě šlo, ale je potřeba nezapomínat na hodnotu max_execution_time v php.ini, defaultne je to myslím jenom 30 vteřin. A nevím, jestli vám hosting dovolí si tuto direktívu nastavit na potřebnou dobu.

Za zvážení stojí navštívit napr. stránky: EasyCron a nebo SetCronJobs a nebo dát do Google fráze 'online cron service' a ono to najde spoustu služeb, free i placené.
jtfcobra
Profil
90 sekund mam v PHP :)


Napsal jsem to takto ale neni videt prubeh ?

<?php
$scripts = array('00204AF33B77', '00204AF39358', '0080A39D4788', '0080A39D5F25','0080A39D4784','0080A39D4782','00204AE24ED7','0080A39CB88D');
foreach($scripts as $script) {
    echo 'Mac adresa: '.$scripts.'</br>';
    file_get_contents("cron2015.php?mac=$script");
    sleep(20);
}
?>
Chro.
Profil
Průběh se ukáže až po ukončení běhu skriptu. Jinak doba uspání procesu zpracování skriptu funkcemi sleep a usleep se do max_execution_time nezapočítává.
jtfcobra
Profil
Jeste jsem to vylepsil:
<?php
$start=microtime(true);
$scripts = array('00204AF33B77', '00204AF39358', '0080A39D4788', '0080A39D5F25','0080A39D4784','0080A39D4782','00204AE24ED7','0080A39CB88D');
foreach($scripts as $script) {
    echo 'Mac adresa: '.$scripts.'</br>';
    file_get_contents("cron2015.php?mac=$script");
    sleep(10);
}
?>
<?php
echo '</br>'; 
echo 'Vyuzita pamet: ' .round((memory_get_usage()/1024/1024),4) . 'MB ' . '(Realne: ' . memory_get_usage(true)/1024/1024 . 'MB, Maximalne: ' . round(memory_get_peak_usage()/1024/1024,4) .'MB) za ' . round(microtime(true)-$start,5) . ' sekund';
?>
Juraj Hajdúch
Profil
Chro.:
Díky, to o nezapočítávání sleep/usleep do max_execution_time jsem nevěděl, opět jsem o něco moudřejší.
jtfcobra
Profil
Mac adresa: Array
Mac adresa: Array
Mac adresa: Array
Mac adresa: Array
Mac adresa: Array
Mac adresa: Array
Mac adresa: Array
Mac adresa: Array

Vyuzita pamet: 0.2455MB (Realne: 0.25MB, Maximalne: 0.2639MB) za 205.29878 sekund
Juraj Hajdúch
Profil
NE (protože vypisuješ celé pole)

echo 'Mac adresa: '.$scripts.'</br>';

ALE (protože chceš vypsat jenom jeden prvek pole)

echo 'Mac adresa: '.$script.'</br>';

$scripts není $script, odstraňte to poslední 's'
Chro.
Profil
Tohle
file_get_contents("cron2015.php?mac=$script");
načte jen surový zdrojový kód, který se nespustí. Je třeba skript cron2015.php volat http protokolem.
file_get_contents("http://domena.cz/.../cron2015.php?mac=$script");
Pak se kód v cron2015.php vykoná.
jtfcobra
Profil
Takle to mám file_get_contents("http://domena.cz/.../cron2015.php?mac=$script"); jen jsem to neuvedl...

dotaz kdyz se to spustit tak to ceka az:
1)dokonci prvni uloha
2) 10 sekund
3)nacte a dokonci druhou ulohu?
atd...??
Keeehi
Profil
file_get_contents čeká na ukončení výpisu dat. Typicky je to konec scriptu. Dá se však zařídit, aby výpis zkončil třeba už na začátku scriptu a ten pak i nadále pokračoval.
jtfcobra
Profil
Takže tech 10 sekund je zbytečných ?
Keeehi
Profil
jtfcobra:
To záleží na tom, čeho chcete dosáhnout. To nemohu vědět.
jtfcobra
Profil
No chci dosáhnout toho aby ty scripty dojely ....a ten cas 10 sekund nepotrebuji rozmezi

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: