Zadejte hledaný výraz...

Skript pro zálohu db spuštěný cronem nefunguje…

Michales
verified
rating uzivatele
(5 hodnocení)
27. 12. 2013 20:01:04
Zdravím všechny,
nastal mi zajímavý problém. Na webu jsem spustil následující skript pro pravidelné zálohy sql db:
http://stackoverflow.com/questions/15197798/auto-mail-backup-of-mysql-database-using-php
$db_host="localhost"; //mysql host
$db_user="*******"; //databse user name
$db_pass="*******"; //database password
$db_name="******"; //database name
$tables="*"; // use * for all tables or use , to seperate table names
$email="*******"; //your email id
///////////////////////////////////////////////////////////////////////////////////////////
/////////don't need to change bellow //////
backup($db_host,$db_user,$db_pass,$db_name,$tables,$email);
function backup($db_host,$db_user,$db_pass,$db_name,$tables = '*',$email)
{
$con= mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_name,$con);
//get all of the tables
if($tables == '*')
{
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result))
{
$tables[] = $row;
}
}
else
{
$tables = is_array($tables) ? $tables : explode(',',$tables);
}
//cycle through
foreach($tables as $table)
{
$result = mysql_query('SELECT * FROM '.$table);
$num_fields = mysql_num_fields($result);
$return.= 'DROP TABLE '.$table.';';
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
$return.= "nn".$row2.";nn";
for ($i = 0; $i < $num_fields; $i++)
{
while($row = mysql_fetch_row($result))
{
$return.= 'INSERT INTO '.$table.' VALUES(';
for($j=0; $j<$num_fields; $j++)
{
$row = addslashes($row);
$row = ereg_replace("n","\n",$row);
if (isset($row)) { $return.= '"'.$row.'"' ; } else { $return.= '""'; }
if ($j<($num_fields-1)) { $return.= ','; }
}
$return.= ");n";
}
}
$return.="nnn";
}
//save file
$filename='db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql';
$handle = fopen($filename,'w+');
fwrite($handle,$return);
fclose($handle);
compress($filename);
send_mail($filename.".zip",$email);
}
function send_mail($filepath,$email)
{
$from = "Backup ";
$subject = "Database backup";
$message="This attachment contains the backup of your database.";
$separator = md5(time());
// carriage return type (we use a PHP end of line constant)
$eol = PHP_EOL;
// attachment name
$filename = "backup.zip";
//$pdfdoc is PDF generated by FPDF
$attachment = chunk_split(base64_encode(file_get_contents($filepath)));
// main header
$headers = "From: ".$from.$eol;
$headers .= "MIME-Version: 1.0".$eol;
$headers .= "Content-Type: multipart/mixed; boundary="".$separator.""";
// no more headers after this, we start the body! //
$body = "--".$separator.$eol;
$body .= "Content-Transfer-Encoding: 7bit".$eol.$eol;
$body .= "This is a MIME encoded message.".$eol;
// message
$body .= "--".$separator.$eol;
$body .= "Content-Type: text/html; charset="iso-8859-1"".$eol;
$body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$body .= $message.$eol;
// attachment
$body .= "--".$separator.$eol;
$body .= "Content-Type: application/octet-stream; name="".$filename.""".$eol;
$body .= "Content-Transfer-Encoding: base64".$eol;
$body .= "Content-Disposition: attachment".$eol.$eol;
$body .= $attachment.$eol;
$body .= "--".$separator."--";
// send message
if (mail($email, $subject, $body, $headers)) {
echo "Your backup sent to your email id";
header("refresh: 1; main.php");
} else {
echo "Oops mail can not be send";
}
}
function compress($filepath)
{
$zip = new ZipArchive();
$file=$filepath.".zip";
if($zip->open($file,1?ZIPARCHIVE::OVERWRITE:ZIPARCHIVE::CREATE)===TRUE)
{
// Add the files to the .zip file
$zip->addFile($filepath);
// Closing the zip file
$zip->close();
}
}
Skript funguje bezvadně, spouštím-li ho ručně (načtením url skriptu) - na e-mail dorazí zazipovaná záloha. Avšak nechám-li skript spuštět cronem (na endoře.cz), nedorazí vůbec nic.
Nemá někdo tušení proč?
Děkuji za radu
27. 12. 2013 20:01:04
https://webtrh.cz/diskuse/skript-pro-zalohu-db-spusteny-cronem-nefunguje#reply979898
Jan Stejskal
verified
rating uzivatele
(7 hodnocení)
27. 12. 2013 20:10:13
práva ke spuštění souboru? špatně nastavený cron (cesta)?
Skript spouštěný cronem by neměl nic vypisovat na výstup.
27. 12. 2013 20:10:13
https://webtrh.cz/diskuse/skript-pro-zalohu-db-spusteny-cronem-nefunguje#reply979897
Michales
verified
rating uzivatele
(5 hodnocení)
27. 12. 2013 20:12:56
Napsal Jan Stejskal;1037365
práva ke spuštění souboru? špatně nastavený cron (cesta)?
Skript spouštěný cronem by neměl nic vypisovat na výstup.
Špatný cron asi ne, poskytuje ho přímo endora. Změnil jsem práva souboru.
Zkusím za 3 minuty jestli to cron odešle
27. 12. 2013 20:12:56
https://webtrh.cz/diskuse/skript-pro-zalohu-db-spusteny-cronem-nefunguje#reply979896
tomve
verified
rating uzivatele
(22 hodnocení)
27. 12. 2013 20:38:55
máš dobrou cestu v cronu ke scriptu?
27. 12. 2013 20:38:55
https://webtrh.cz/diskuse/skript-pro-zalohu-db-spusteny-cronem-nefunguje#reply979895
Michales
verified
rating uzivatele
(5 hodnocení)
27. 12. 2013 20:48:08
Napsal Tomve;1037385
máš dobrou cestu v cronu ke scriptu?
Ano mám, endora by ani špatnou cestu k souboru nepustila.
Viz.
Ani úprava práv souboru nepomohla.
Zarážející je že když použiju přímo url tak záloha proběhne.
27. 12. 2013 20:48:08
https://webtrh.cz/diskuse/skript-pro-zalohu-db-spusteny-cronem-nefunguje#reply979894
crs
verified
rating uzivatele
(1 hodnocení)
27. 12. 2013 21:28:51
Dokázal bys nějak zachytit a uložit případné chybové hlášky (přes ob_start, ob_get_contents()...)?
P.S. Ještě mě napadá, jestli spuštění přes cron nemá náhodou jinou konfiguraci (třeba menší paměť pro skript apod.)...
27. 12. 2013 21:28:51
https://webtrh.cz/diskuse/skript-pro-zalohu-db-spusteny-cronem-nefunguje#reply979893
Michales
verified
rating uzivatele
(5 hodnocení)
27. 12. 2013 21:36:38
Napsal crs;1037413
Dokázal bys nějak zachytit a uložit případné chybové hlášky (přes ob_start, ob_get_contents()...)?
P.S. Ještě mě napadá, jestli spuštění přes cron nemá náhodou jinou konfiguraci (třeba menší paměť pro skript apod.)...
Chyby by byli asi uložené v logu myslim tedy. Co se týče konfigurace, zkusim kontaktovat endoru.
27. 12. 2013 21:36:38
https://webtrh.cz/diskuse/skript-pro-zalohu-db-spusteny-cronem-nefunguje#reply979892
node
verified
rating uzivatele
(5 hodnocení)
27. 12. 2013 21:38:10
mal som rovnaky problem. v mojom pripade bola ale chyba v tom ze sa akosy staticky "nakesovala" query a spustila sa iba raz. zmenil som pouzitu query funkciu a potom uz to islo. malo to nieco s php v cli mode. anyway u mna islo o drupal skript, ty mas ciste php takze moc neporadim. akurat skus hladat nieco na tuto temu v suvislosti prave s php cli
27. 12. 2013 21:38:10
https://webtrh.cz/diskuse/skript-pro-zalohu-db-spusteny-cronem-nefunguje#reply979891
Michales
verified
rating uzivatele
(5 hodnocení)
28. 12. 2013 11:16:32
Zdravím,
takže mohu říct že se to vyřešilo samo, spíše chyba byla v nastavení cronu.
Při nastavení cronu jsem dával nejbližší čas zpracování a to byla podle všeho chyba. Včera jsem nastavil cron na čas vzdalený od nastavení a záloha se v noci udělala.
Takže potvrzuji script je funkční.
Děkuji všem za Váš čas.
28. 12. 2013 11:16:32
https://webtrh.cz/diskuse/skript-pro-zalohu-db-spusteny-cronem-nefunguje#reply979890
Pro odpověď se přihlašte.
Přihlásit