Autor Zpráva
newbie
Profil *
Ahoj, sem v tomhle newbie a mam problem se spoustenim skriptu pomoci cronu. Script pres url mi normalne funguje ( udela co udelat ma ) ale pomoci cronu nejde spustit, resp neprovede se to co pri spusteni pres url. Cron je funkcni, mam to overene zavolanim jineho skriptu ktery vygeneruje email a posle mi ho. Stranky hostuju na pipni kde je cron v baleni a evidentne funguje, soubor ktery se ma cronem spustit se oznaci v aplikaci a obsahuje kompletni cestu, takze by ho cron najit mel, ten pomocny skript co mi posila testovaci email je ve stejnem adresari a funguje. Hledal jsem ruzny info ale uz sem docela bezradnej, kdyby nekdo vedel co s tim bylo by to skvely, diky.

Moderátor Majkl578: Příště si prosím založ vlastní téma a nepíš do 9 měsíců starého.
newbie
Profil *
Ok, tak sorry, myslel sem ze lepsi by bylo kdyz to bude navazovat na stejny tema, byt starsiho data, aspon pak clovek nemusi prohledavat milion vlaken. Zkousel sem fakt vsecko mozny, ale ne a ne to cronem rozbehnout, uz sem docela zoufalej...
Davex
Profil
Pokud se jiný skript spustí, tak nebude chyba v cronu, ale nejspíš bude v tom skriptu, který nefunguje. Dodej zdrojový kód problematického skriptu.
newbie
Profil *
tady je obsah toho souboru
<?
	include("config/connect.php");

	  function SendHTMLMail2($to,$subject,$mailcontent,$from)
	  {
		$array = split("@",$from,2);
		$SERVER_NAME = $array[1];
		$username =$array[0];
		$headers = "From: $username@$SERVER_NAME\nReply-To:$username@$SERVER_NAME\nX-Mailer: PHP\n";
	
		$limite = "_parties_".md5 (uniqid (rand()));
	
		$headers .= "Date: ".date("l j F Y, G:i")."\n";
		$headers .= "MIME-Version: 1.0\n";
		$headers .= "Content-Type: text/html;\n";
		$headers .= " boundary=\"----=$limite\"\n\n";
	
		/*$eol = "\n";
		$headers .= 'From: Johny <neco@neco.cz>'.$eol; 
		$headers .= 'Reply-To: Johny <neco@neco.cz>'.$eol; 
		$headers .= 'Return-Path: Johny <neco@neco.cz>'.$eol;    /* 
		
		/*$mime_boundary=md5(time()); 
		
		# HTML Version 
		$msg .= "--".$mime_boundary.$eol; 
		$msg .= "Content-Type: text/html; charset=utf-8".$eol; 
		$msg .= "Content-Transfer-Encoding: 8bit".$eol; 
		$msg .= $mailcontent.$eol.$eol; 
		*/
		mail($to,$subject,$mailcontent,$headers);
	  }

	function SendCounterMail($updatestat1)
	{	
		$content1='';

		$content1.= "<font style='font-size: 10px;font-family: Arial, Helvetica, sans-serif;color: #333333;'>"."</font><br>"."<br>"."<p align='center' style='font-size: 14px;font-family: Arial, Helvetica, sans-serif;font-weight:bold;'>Chyba čítače</p>"."<br>".	
	
	"<table border='0' cellpadding='3' cellspacing='0' width='100%' align='center' class='style13'>";
		
		if($updatestat1==1)
		{
			$content1.="<tr style='font-size: 10px;font-family: Arial, Helvetica, sans-serif;color: #333333;'>
			<td>Records soubor neběží, je nutno ho restarotovat pro udržení procesu.</td>
			</tr>";
		}

		$content1.="<tr style='font-size: 10px;font-family: Arial, Helvetica, sans-serif;color: #333333;'>
		<td>Tento email je testem pro kontrolu běhu procesu a pro update records.</td>
		</tr>
		</table>";

		$subject="informace čítače";
		$from="neco@neco.cz";
		$email = "neco@neco.cz";

		SendHTMLMail2($email,$subject,$content1,$from);
	}
	
	$updatestat = 0;
	
	$qrysel = "select * from auction_pause_management where id='4'";
	$ressel = mysql_query($qrysel);
	$total1 = mysql_num_rows($ressel);
	if($total1==0)
	{
		$qryins1 = "Insert into auction_pause_management (referral_bids) values('1')";
		mysql_query($qryins1);
		$qrysel = "select * from auction_pause_management where id='4'";
		$ressel = mysql_query($qrysel);
	}	
	
	$objsel = mysql_fetch_array($ressel);

	sleep(5);

	$qrysel1 = "select * from auction_pause_management where id='4'";
	$ressel1 = mysql_query($qrysel1);
	$objsel1 = mysql_fetch_array($ressel1);
	
	$oldvalue = $objsel["referral_bids"];
	$newvalue = $objsel1["referral_bids"];

	if($oldvalue==$newvalue)
	{
		$updatestat = 1;
		SendCounterMail($updatestat);
		header("location: update_records.php");
	}	
	if($updatestat==0)
	{
		SendCounterMail($updatestat);
	}
?>

kdybych to rucne zaktualizoval kazdou hodku pres url tak to normalne vsecko funguje, ale spravne to ma udelat prave ten cron a to nevim proc nejde. pokud se ten soubor nezaktualizuje, tak se to za hodku a 25 minut zastavi a rozbehne se to zase teprve az to rucne nactu pres url. jakmile dojde k timeoutu a zastaveni behu skriptu pro nezaktualizovani tohohle souboru, tak tenhle soubor mi sam posle email ze pro beh skriptu se musi tento soubor zaktualizovat ( myslim tim provest nacteni ). cron 100% bezi, mam to overeno na jinem testovacim souboru ve stejnem adresari, tzn ze cron ty soubory musi videt kdyz muj test skript se spusti a provede. nejak tomu nerozumim proc neco cronem spustit jde a neco ne. nevim jestli se to treba nema spustit pres nejaky jiny soubor ze ktereho se na tenhle odkazuje? cron sam o sobe nastavit krome casu kdy se ma provest nacteni konkretniho skriptu nastavit v administraci nijak neda, nebo o tom alespon nevim. cesta ke vsem souborum je prima, tzn v listu je vse co je v jakem adresari umisteno, jen staci to oznacit a nastavit cas kdy se to ma provest. pro spravnou cinnost cronu na tenhle soubor by se asi melo nekde neco nastavovat, ale nevim kde a jak. dik za kazdou radu

Moderátor Majkl578: Kód prosím vkládej do tagu [pre], stačí kliknout na
Davex
Profil
Použij delší podobu otevírací značky <?php a ukládej si výslednou stránku do souboru, zda tam nejsou nějaké chyby, jako připojení k databázi apod.

na začátek skriptu přidej:
<?php
  function savedebug($buffer) {
    file_put_contents(dirname(__FILE__) . '/debug.log', $buffer);
    return $buffer;
  }

  error_reporting(E_ALL);
  ob_start('savedebug');
?>

(Příště prosím vkládej kód mezi značky [pre] a [/pre])

Edit: Pokud se tím má ještě spustit skript update_records.php, tak se to bude muset udělat jinak, než pomocí
header("location: update_records.php");
newbie
Profil *
Ok omlouvam se, neznam to jeste jak jak to sem mam vkladat, ale snad se to naucim. :-)) Uz sem to updatnul tak cekam jestli se to rozbehne pomoci cronu. Jeste by se k tomu asi mely pridavat nejake parametry, ale nevim kam s nimi, cron by to mel spoustet s temito parametry curl -s -o /dev/null a ten soubor, ale nevim jak a kam to pridat. Sem v tom zacatecnik, tak me neukamenujte. :-)) A zatim to ten skript bohuzel stale nespousti, update mam nastaven na 5 min, takze to uz by to muselo jet.
Majkl578
Profil
Co zkusit použít jednodušší wget?
wget -O - http://example.com/foo.bar > /dev/null

Toto stáhne soubor, výstup pošle do STDOUT a ten se následně směruje do /dev/null.

Zpravidla se to přidává do crontabu (/etc/crontab), k čemuž je potřeba oprávnění uživatele root.
newbie
Profil *
<?php
  function savedebug($buffer) {
    file_put_contents(dirname(__FILE__) . '/debug.log', $buffer);
    return $buffer;
  }

  error_reporting(E_ALL);
  ob_start('savedebug');
?>

<?php
	include("config/connect.php");

	  function SendHTMLMail2($to,$subject,$mailcontent,$from)
	  {
		$array = split("@",$from,2);
		$SERVER_NAME = $array[1];
		$username =$array[0];

Je to takto správně? Práva mám nastaveny na 755 pro ten skript který spouští cron, ten skript který je volaný tímto skriptem je nastaven na 644, není třeba problém tam? Ale asi by neměl si myslím... Možná už mám schýzu a hledám chyby i tam kde nejsou.
newbie
Profil *
Jenže já se do crontabu právě nemůžu dostat, resp nikde jsme to nenašel. Cron se nastavuje v adminu a jde jen zvolit soubor v listingu všeho co je na serveru nahráno a nastavit časy spouštění, nic víc tam nejde. Jo vlastně lze po přijetí konkrétního emailu spustit cron i mimo ten nastavený čas a mám pocit, jako by ten soubor právě kvůli tomu i posílal ten email, že se zastaví pokud ho neupdatnu a mělo by so to použít asi jako smyčka. Soubor pošle email ten spustí cron a updatne se to a zase to běží než dojde mail, že se to zastaví a tak pořád dokola, jako by se testovalo, že je to průchozí na data a smyčka funguje... Prosím, já jsem v tom fakt začátečník, kam a jak mám vepsat ten wget? Můžu poprosit o konkrétní kus kódu který budu moct ctl c a ctrl v?
Davex
Profil
Které všechny skripty se mají spustit? Jen ten, který jsi uvedl zde, nebo i update_records.php? Spustí se alespoň jeden z nich?

Vytváří se v adresáři se skriptem soubor debug.log? Jsou v něm nějaké chyby?
newbie
Profil *
Podle mych informaci by cron mel spoustet soubory 3 a to checkupdate.php, checkupdatebutler.php a checkupdaterecords.php, ten jsem sem už vypsal. Podle info ktery jsem k tomu taky nasel, by udajne melo stacit cronem spoustet jen soubor checkupdate.php a ten si sam spusti ty zbyly 2 soubory, udajne to tak i nekomu funguje, ale me ne. Me to cele funguje jen pokud rucne pres url nactu ten soubor checkupdaterecords.php, pak to pres hodinu jede a potom se to zakousne.

Vypis souboru checkupdate.php je
<?php
	include("config/connect.php");
	include("functions.php");
	
	$qrysel2 = "select * from auction_pause_management where id='3'";
	$ressel2 = mysql_query($qrysel2);
	$total = mysql_num_rows($ressel2);
	if($total==0)
	{
		$qryins = "Insert into auction_pause_management (referral_bids) values('1')";
		mysql_query($qryins);
		$qrysel2 = "select * from auction_pause_management where id='3'";
		$ressel2 = mysql_query($qrysel2);
	}
	$objsel2 = mysql_fetch_array($ressel2);
	
	$qrysel = "select * from auction_pause_management where id='4'";
	$ressel = mysql_query($qrysel);
	$total1 = mysql_num_rows($ressel);
	if($total1==0)
	{
		$qryins1 = "Insert into auction_pause_management (referral_bids) values('1')";
		mysql_query($qryins1);
		$qrysel = "select * from auction_pause_management where id='4'";
		$ressel = mysql_query($qrysel);
	}	
	$objsel = mysql_fetch_array($ressel);
	
	sleep(5);

	$qrysel3 = "select * from auction_pause_management where id='3'";
	$ressel3 = mysql_query($qrysel3);
	$objsel3 = mysql_fetch_array($ressel3);
	
	$oldvalue1 = $objsel2["referral_bids"];
	$newvalue1 = $objsel3["referral_bids"];

	$qrysel1 = "select * from auction_pause_management where id='4'";
	$ressel1 = mysql_query($qrysel1);
	$objsel1 = mysql_fetch_array($ressel1);
	
	$oldvalue = $objsel["referral_bids"];
	$newvalue = $objsel1["referral_bids"];
	
	if($oldvalue1==$newvalue1)
	{
		$output1 = exec("php update_butler.php >/dev/null &");
	}	

	if($oldvalue==$newvalue)
	{
		$output = exec("php update_records.php >/dev/null &");
	}	
?>


vypis souboru checkupdatebutler.php

<?
	include("config/connect.php");

  function SendHTMLMail2($to,$subject,$mailcontent,$from)
  {
	$array = split("@",$from,2);
	$SERVER_NAME = $array[1];
	$username =$array[0];
	$headers = "From: $username@$SERVER_NAME\nReply-To:$username@$SERVER_NAME\nX-Mailer: PHP\n";

	$limite = "_parties_".md5 (uniqid (rand()));

	$headers .= "Date: ".date("l j F Y, G:i")."\n";
	$headers .= "MIME-Version: 1.0\n";
	$headers .= "Content-Type: text/html;\n";
	$headers .= " boundary=\"----=$limite\"\n\n";

	/*$eol = "\n";
	$headers .= 'From: Johny <neco@neco.cz>'.$eol; 
	$headers .= 'Reply-To: Johny <neco@neco.cz>'.$eol; 
	$headers .= 'Return-Path: Johny <neco@neco.cz>'.$eol;    /* 
	
	/*$mime_boundary=md5(time()); 
	
	# HTML Version 
	$msg .= "--".$mime_boundary.$eol; 
	$msg .= "Content-Type: text/html; charset=utf-8".$eol; 
	$msg .= "Content-Transfer-Encoding: 8bit".$eol; 
	$msg .= $mailcontent.$eol.$eol; 
	*/
	mail($to,$subject,$mailcontent,$headers);
  }

	function SendCounterMail($butlerstat1)
	{	
		$content1='';

		$content1.= "<font style='font-size: 10px;font-family: Arial, Helvetica, sans-serif;color: #333333;'>"."</font><br>"."<br>"."<p align='center' style='font-size: 14px;font-family: Arial, Helvetica, sans-serif;font-weight:bold;'>chyba počítadla butler</p>"."<br>".	
	
	"<table border='0' cellpadding='3' cellspacing='0' width='100%' align='center' class='style13'>";
		
		if($butlerstat1==1)
		{
			$content1.="<tr style='font-size: 10px;font-family: Arial, Helvetica, sans-serif;color: #333333;'>
			<td>Butler soubor neběží, musíte ho aktivovat pro další proces.</td>
			</tr>";
		}

		$content1.="<tr style='font-size: 10px;font-family: Arial, Helvetica, sans-serif;color: #333333;'>
		<td>Tento mail je testovací pro kontrolu a reaktivaci procesu butler.</td>
		</tr>
		</table>";

		$subject="informace z počítadla - updatebutler";
		$from="neco@neco.cz";
		$email = "neco@neco.cz";

		SendHTMLMail2($email,$subject,$content1,$from);
	}

	$butlerstat = 0;

	$qrysel2 = "select * from auction_pause_management where id='3'";
	$ressel2 = mysql_query($qrysel2);
	$total = mysql_num_rows($ressel2);

	if($total==0)
	{
		$qryins = "Insert into auction_pause_management (referral_bids) values('1')";
		mysql_query($qryins);
		$qrysel2 = "select * from auction_pause_management where id='3'";
		$ressel2 = mysql_query($qrysel2);
	}

	$objsel2 = mysql_fetch_array($ressel2);

	sleep(5);

	$qrysel3 = "select * from auction_pause_management where id='3'";
	$ressel3 = mysql_query($qrysel3);
	$objsel3 = mysql_fetch_array($ressel3);

	$oldvalue1 = $objsel2["referral_bids"];
	$newvalue1 = $objsel3["referral_bids"];
	
	if($oldvalue1==$newvalue1)
	{
		$butlerstat = 1;
		SendCounterMail($butlerstat);
		header("location: update_butler.php");
	}	
	if($butlerstat==0)
	{
		SendCounterMail($butlerstat);
	}
?>


do debugu se zapsalo tohle

Notice: Undefined index:  language_name in /DISK3/WWW/neco.cz/www/neco/config/config.inc.php on line 27

Warning: include(language/english.php): failed to open stream: No such file or directory in /DISK3/WWW/neco.cz/www/neco/config/config.inc.php on line 34

Warning: include(): Failed opening 'language/english.php' for inclusion (include_path='.') in /DISK3/WWW/neco.cz/www/neco/config/config.inc.php on line 34


tak snad to nejak rozlustime :-))
Davex
Profil
Takto prasácké skripty půjde přes cron zprovoznit asi těžko - za trest bych to dal autorovi celé předělat. Podle obsahu debugu to kromě několika nepodstatných chyb funguje, ale nebudou fungovat přesměrování pomocí funkce header() a funkce exec() bude na serveru pravděpodobně zakázána.

Zkus následující úpravy:

v souboru checkupdaterecords.php uprav řádek č. 89 na
//  header("location: update_records.php");
file_get_contents('http://adresa.webu/update_records.php');


v souboru checkupdatebutler.php uprav řádek č. 90 na
//  header("location: update_butler.php");
file_get_contents('http://adresa.webu/update_butler.php');


v souboru checkupdate.php změň řádky č. 47 a 52
...
 if($oldvalue1==$newvalue1)
    {
//        $output1 = exec("php update_butler.php >/dev/null &");
        $output1 = file_get_contents('http://adresa.webu/update_butler.php');
    }    

    if($oldvalue==$newvalue)
    {
//        $output = exec("php update_records.php >/dev/null &");
        $output = file_get_contents('http://adresa.webu/update_records.php');
    }
newbie
Profil *
Tak sem to zkusil, ale porad to nefunguje a navic ted uz to nejde rozbehnout ani pres url, zacinam byt fakt zoufalej :-(
velasoft
Profil *
newbie:
Ahoj podařilo se to to nějak vyřešit? Používám stejný scripty
newbie
Profil *
Ahoj, me se to rozchodit nepodarilo, zkousel sem to nouzove prinutit i automatickym nacitanim pres firefox, ale porad stejny, proste se to porad zastavuje. Navic mi ani neni jasny k cemu tam vubec ta kravina s cronem vubec je, navic kdyz se to kontroluje kazdou zhruba hodku a pul, tak nejaky zjistovani jestli to bezi po takovy dobe je ponekud zbytecna komplikace navic podle me. Zda se to bejt peknej crap k nicemu ten skript, tobe to funguje?
AM_
Profil
problém bude v pracovním adresáři skriptu - zřejmě je při spuštění CRONEM jiný pracovní adresář, než když ho otvíráš ručně. Před všechny relativní cesty ve skriptu přidej dirname(__FILE__), tedy např.
include("config/connect.php");
// ->
include(dirname(__FILE__) ."/config/connect.php");

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: