Valaki lefuttatna nekem egy CRON-t a szerveréről próbaként?

Sziasztok,

Van egy teljesen jól működő kódom, amikor "manuálisan" nyitom meg, akkor úgy működik, ahogy kell.

Ám itt jön a probléma:

Amikor a CRON nyitja meg a PHP-t, akkor a benne lévő ciklus lefut, ráadásul annyiszor ahányszor kell, plusz a ciklusban lévő adatbázisba írások is végbemennek, DE a ciklusban lévő CURL nem fut le.

Mi lehet ennek az oka? Gondoltam arra, hogy a PHP futási idő limitálva van, de akkor a ciklusban lévő adatbázisba írásoknak se kéne működniük, nem?

Esetleg van valaki, aki le tudná nekem futtatni a CRON-t saját szerverről, hogy kiderüljön azzal van-e gond? Ha igen, kérem írjon PM-et. Köszönöm előre is!

Hozzászólások

Hogy nyitod meg manuálisan és hogy cron-ból? Tedd az error_reporting-ot E_ALL-ra és nézd meg, mi kerül az stder-re.

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Tárhelytől függ. A cron feladat beállításainál nincs valami naplózási vagy akármilyen lehetőség? (pl. e-mail az eredményről)

A lefuttatott parancsot te adod meg? Ha igen, és kiderül, hogy tényleg a php.ini-ben van eltérés (gondolom/remélem a dl() nem játszik, hogy te kézzel betöltsd), akkor végszükség esetén csinálhatod, hogy cron-ból wget-tel lekéred az oldalt, bár az elég masszív taknyolás.

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Ha tudod szerkeszteni a parancssort, akkor a php -f ... 2> /home/u18.../cron.log -al át tudod írányítani az stderr-t egy fájlba, a következő lefutás után pedig látod, hogy mi a gond.

A wget egy általános letöltő program, ami többek közt http-n is tud letöltögetni. Command to run-nál valami wget http://foo.bar/csinalo.php, ez gyakorlatilag mintha a böngészőből letöltenéd a csinalo.php-t, így garantáltan ugyanazzal az ini-vel fog menni, mert ugyanaz a webserver szolgálja ki (ha még leszabályozod, hogy ez a fájl csak a 127.0.0.1-ről legyen elérhető, még akár biztonságosnak is lehet nevezni)

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Mert tippre a parancssorból/cron-ból indított php scriptekhez tartozó ini-ben nincs benne az extension=php5_curl.so [fejből írtam, nem biztos] sor, úgyhogy nincs betöltve a curl kiterjesztés (ha nem tiltották le, akkor egy dl('php5_curl'); [szintén fejből] sorral a scriptedben is betöltheted, de valszeg tiltva van a dl - egy próbát azért megér).

Ha a dl sem működik, akkor marad az, hogy egyezkedned kell az üzemeltetőkkel, vagy a curl-t lecserélni valami másra (nem írtad, hogy mire használod)

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Köszönöm a választ. Sajnos a dl('php5_curl'); parancsot nem tudom kiadni, tiltva van.

Írtam PM-et.

Szerk.: nagyon érdekes, hogy a CURL-lal bejelentkezek egy oldalra és a CRON egy cookie.txt fájlt is létrehoz, akár CRON-nal futtatva is... tehát feltételezem, hogy mégsincs tiltva a CURL CRON-os futtatásnál.

Viszont most kipróbáltam egy egyszerűbb CURL-os feladatot is, konkrétan ezt:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://news.google.com/news?hl=en&topic=t&output=rss');
$fp = fopen('rss.xml', 'w');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec ($ch);
curl_close ($ch);
fclose($fp);

És ez "manuálisan" futtatva működik, tehát beleírja az rss.xml fájlba amit kell, CRON-nal futtatva viszont hozzá se nyúl az rss.xml fájlhoz.

Tehát akkor most mi a helyzet?... Hogy lehet, hogy egy CURL-os loginolás sikeres CRON-nal is, más CURL-os feladat viszont csak "manuális" futtatás esetén működik?

De jó lenne, ha valaki lefuttatna nekem saját szerverről egy CRON-t... :) Látnánk, hogy biztosan azzal van-e a gond.

Az elejére egy

chdir(dirname(__FILE__));

?

Szerk.: Most látom a leveled. A legjobb tippem még mindig a working directory, úgyhogy a fenti kódrészlet még áll.
Szerk 2.: Ill. nézd meg a fájlok (itt xml, a küldött kódban txt) elérési jogosultságait, nem feltétlenül fut ugyanazzal a userrel a cron-ból indított script és a webszerver (próbáld ki, hogy 777-et adsz neki, ha az a gond, akkor ez biztosan kizárja)

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Még nem akarom elkiabálni, mert melóban vagyok és csak fél szemmel tudok idefigyelni, de mintha működik (chdir(dirname(__FILE__)))!!! Nem tudod mióta szenvedek ezzel :D Ha ez tényleg igaz, akkor leköteleztél :) Majd azért még tesztelgetem később.

El tudod nekem magyarázni, hogyha tényleg ez a megoldás, akkor miért? Chdir, tehát jogosultság adás a könyvtárnak... de a cookie.txt-t hogyhogy enélkül is létre tudta hozni?

Ha anélkül is megcsinálta, akkor valszeg nem ez lesz, mert ez csak a munkakönyvtárat változtatja arra, ahol a script van (alapbeállításon a futtató user home könyvtárából indít).
Nem lehet hogy a cookie.txt még egy korábbi, webes indításból maradt ott?

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Bocs, hogy csak most írok, eddig teszteltem.

Én ezt nem tudom megfejteni. Ami történt:

1.: Amikor nem volt benne a fájl elején a chdir(dirname(__FILE__));, akkor írt a cookie.txt fájlba, de a CURL nem végezte el a dolgát.

2.: Ezután beletettem a fájl elejére a chdir(dirname(__FILE__));, így nem írt a cookie.txt-be, viszont működött a CURL.

3.: Kivettem a fájl elejéről a chdir(dirname(__FILE__));-t, így most írt a cookie.txt-be és a CURL is működött.

Na ezt fejtse meg valaki...

Addig tesztelek tovább.

Szerk.: a következő CRON-nál már nem működött a CRON így, hogy ki van véve a chdir a kód elejéről, viszont a cookie.txt-t megírta. Mi a fene?

Nem, megnéztem. Lehet, hogy nem a public_html-be dolgozik ilyenkor, hanem valami olyan helyre, amit én nem láthatok? Akkor viszont ez nem lesz gond?

Egyébként most visszaírtam a chdir(dirname(__FILE__));-t a php-be, működik a CURL, de a cookie.txt fájlt változatlanul hagyja.

Ha tényleg az van, hogy nem abba a cookie.txt fájlba dolgozik, akkor hogy deríthetném ki, hogy hova? Vagy ez lehetetlen, hiszen csak a public_html mappához van hozzáférésem?

Ha még mindig public_html/cookie.txt néven hivatkozol rá és a futtatott PHP scripted is a public_html-ben van, akkor írd át a COOKIEFILE/COOKIEJAR-t cookie.txt-re (btw, ha az első lekérésnek kéne beállítania valami sütit, amit a többinek olvasnia kéne, akkor afaik közben kell egy curl_close, mert csak akkor írja ki a sütiket (The name of a file to save all internal cookies to when the handle is closed, e.g. after a call to curl_close. - http://www.php.net/manual/en/function.curl-setopt.php)

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

php.ini-k nem különböznek? cli-re és a webserver által használtra?

Jogosultságok rendben vannak? Mert nem biztos, hogy ugyanazon felhasználó nevében fut CRON-ból indítva, mint amikor kézzel indítod. Ellenőrizd a kimeneti fájl teljes elérési útján a jogosultságokat (a teszt idejére mindenki írhassa és beléphessen a könyvtárakba). Illetve megpróbálhatsz egy sima fájl létrehozást tenni a PHP szkriptedbe és megnézni, mindkét indítás esetén létrejön-e a fájl.