Zadejte hledaný výraz...

Nefunkční fce exec

shoops
verified
rating uzivatele
(6 hodnocení)
7. 5. 2014 13:43:15
Zdravím webtrh,
zatím jsem nikdy nedělal aplikaci, kde bych potřeboval spouštět externí script. Bohužel nyní jsem se k tomu dostal a potřebuji v php scriptu spustit nezávislý proces - jiný PHP script, aby i po dokončení scriptu běžel dál na pozadí. Výstup z něj ukládám do databáze, takže do scriptu výstup nepotřebuji. Jedná se o nekonečný cyklus. Mohl by mi někdo zde pomoci a případně mne nasměrovat?
Zkouším tento kód...
if (function_exists( 'exec' )) {
$prikaz = "/usr/bin/php ".$_SERVER."/scripts/continue.php > /dev/null &";
tolog($prikaz);
$ex = exec($prikaz);
tolog($ex);
} else {
tolog("Funkce 'exec' není definována (povolena)");
}
$ex proměnná je prázná a příkaz se neprovede...
Předem díky za odpovědi a připomínky.
7. 5. 2014 13:43:15
https://webtrh.cz/diskuse/nefunkcni-fce-exec/#reply1021427
tomve
verified
rating uzivatele
(22 hodnocení)
7. 5. 2014 13:47:42
blbě čtu haha
7. 5. 2014 13:47:42
https://webtrh.cz/diskuse/nefunkcni-fce-exec/#reply1021426
shoops
verified
rating uzivatele
(6 hodnocení)
7. 5. 2014 14:22:38
Je otázka příliš debilní? Nebo jak mám tento koment chápat?
Napsal Tomve;1085710
blbě čtu haha
7. 5. 2014 14:22:38
https://webtrh.cz/diskuse/nefunkcni-fce-exec/#reply1021425
Roman
verified
rating uzivatele
(15 hodnocení)
7. 5. 2014 14:29:41
Já jsem z toho nepochopil, jestli ti funkce exec nejde spustit obecně nebo jestli jenom chybuje při spuštění skriptu. Pokud nejde vůbec, tak je v php.ini zakázaná a je třeba ji povolit.
7. 5. 2014 14:29:41
https://webtrh.cz/diskuse/nefunkcni-fce-exec/#reply1021424
shoops
verified
rating uzivatele
(6 hodnocení)
7. 5. 2014 14:38:17
Funkce je povolena, nefunguje mi implemetace.
Napsal Caesar;1085725
Já jsem z toho nepochopil, jestli ti funkce exec nejde spustit obecně nebo jestli jenom chybuje při spuštění skriptu. Pokud nejde vůbec, tak je v php.ini zakázaná a je třeba ji povolit.
---------- Post added 07.05.2014 at 14:41 ----------
Řešil jsem problém s cestami pro include ve volaném scriptu, ted jsou tam na tvrdo, ale stejně to nejde.
7. 5. 2014 14:38:17
https://webtrh.cz/diskuse/nefunkcni-fce-exec/#reply1021423
Petr Soukup
verified
rating uzivatele
(5 hodnocení)
7. 5. 2014 15:02:15
Nejsem si jistý na 100%, ale pokud se spustí proces z PHP, tak po skončení se stejně všechny spuštěné procesy zabijou. Pokud je cílem spustit nějaký dlouhoběžící skript a nečekat na odpověď, tak je jednodušší dát na jeho začátek ignore_user_abort a při zavolání přes curl dát timeout třeba 0.1s
7. 5. 2014 15:02:15
https://webtrh.cz/diskuse/nefunkcni-fce-exec/#reply1021422
shoops
verified
rating uzivatele
(6 hodnocení)
7. 5. 2014 16:21:41
Cílem je v podstatě každé 2s poslat dotaz na api, zpracovat výlsedek a uložit do DB. Cílem ale bylo dělat to pouze v případě, že je to potřeba a nikoli neustále, což by dělal cron. Takhle jsem to chtěl spustit na základě uživatelské interakce. A pak nechat dojet do timeoutu a v případě potřeby apk znovu spustit. Ale pokud to nevyřeším takto, nezbyde než cron...
7. 5. 2014 16:21:41
https://webtrh.cz/diskuse/nefunkcni-fce-exec/#reply1021421
shoops
verified
rating uzivatele
(6 hodnocení)
12. 5. 2014 11:20:04
Nějaké nápady? :)
12. 5. 2014 11:20:04
https://webtrh.cz/diskuse/nefunkcni-fce-exec/#reply1021420
Použijte plánované úlohy, např. Redis + Resque + Resque-scheduler.
12. 5. 2014 15:34:47
https://webtrh.cz/diskuse/nefunkcni-fce-exec/#reply1021419
mH081
verified
rating uzivatele
(1 hodnocení)
10. 6. 2014 22:45:09
Přidávám moje řešení, co jsem zbastlil teď za pár minut, tak si to ohněte jak potřebujete. Potřebujete k němu na serveru GNU screen. Většinou všude je, na debian-like systémech stačí:
Ukážu jak to funguje z terminálu, stejně fungovat to bude i z browseru.
Obsah souboru main.php:
$BG_SCRIPT_PATH = "/tmp/bgjob/bg.php";
$BG_JOB_PATTERN = "screen -US bg_job_php -m -d /usr/bin/env php {$BG_SCRIPT_PATH}";
function tolog($str)
{
return file_put_contents("log.log", "{$str}n", FILE_APPEND);
}
if (function_exists('exec'))
{
tolog("Starting: {$BG_JOB_PATTERN}");
$execret = exec($BG_JOB_PATTERN);
$logmsg = (!strlen($execret) > 0) ? "Ok, job executed without errors." : $execret;
tolog("Background job retval: {$logmsg}");
}
else
{
tolog("Funkce 'exec' není definována (povolena)");
}
Obsah souboru bg.php:
// aby script netimeoutnul
set_time_limit(0);
function tolog($str)
{
return file_put_contents("log.log", "{$str}n", FILE_APPEND);
}
function niceFunction()
{
// napr. zapis do db
// ....
tolog(__FILE__ .": " . microtime(TRUE));
}
while(1)
{
niceFunction();
sleep(1);
}
Screen je velmi mocná zbraň a tohle rychlo-řešení by Vám mělo fungovat, i když není ideální. Pokud Vám fungovat nebude, buď budete mít špatná práva (všimněte si na výstupu v terminálu eXecute flagu), nebo cesty.
Pěkný den
10. 6. 2014 22:45:09
https://webtrh.cz/diskuse/nefunkcni-fce-exec/#reply1021418
Pro odpověď se přihlašte.
Přihlásit