2016-12-04 23 views
0

データベースのバックアップを作成して電子メールに送信するPHPスクリプトを毎日自動的に実行したいと思います。 WebブラウザでURLを呼び出して実行すると良いことがすべてあります。私は私のサーバーでcronジョブを定義するときしかし、私はこのエラーを得た:cronジョブでPHPスクリプトを実行する方法

sh: /Viana-BackupMailer/mehravar_news_20161204_192302.sql.gz: No such file or directory mysqldump: Got errno 32 on write X-Powered-By: PHP/5.4.45 Content-type: text/html

私はcronジョブでコマンドの下にこれを使用する:

php /home/mehravar/public_html/Viana-BackupMailer.php 

と、これは私のPHPコードです:

<?php 
    $TimeZone = "Asia/Tehran";    // Your location time zone 
    $SiteName = "Mysite.com";    // Your site name 
    $SiteTitle = "My Site Title";   // Your site title 
    $DeleteBackup = false;     // Delete Backup file after send it by email 

    $DB_Server = "localhost";    // MySQL server name 
    $DB_Name = "DB_Name";     // MySQL database name 
    $DB_Username = "DB_User";    // MySQL database Username 
    $DB_Password = "DB_Pass";    // MySQL database Password 

    $Mail_To = "[email protected]";   // Receiver email 
    $Mail_From = "[email protected]";  // Sender email (Your host email) 

    $LogText = ""; 
    $StorageDir = "Viana-BackupMailer"; 
    if(!is_dir($_SERVER['DOCUMENT_ROOT']."/".$StorageDir)){ 
     mkdir($_SERVER['DOCUMENT_ROOT']."/".$StorageDir, 0755); 
    } 

    date_default_timezone_set($TimeZone); 
    $BackupDate = date("Ymd_His"); 
    $LogDate = date("Ym"); 
    $Path = $_SERVER["DOCUMENT_ROOT"]."/".$StorageDir."/"; 
    $LogFile = $Path.$LogDate."_Viana-BackupMailer.log"; 

    function WriteLog($LogText){ 
     $Handle = fopen($GLOBALS['LogFile'], (file_exists($GLOBALS['LogFile'])) ? 'a' : 'w'); 
     fwrite($Handle, "         Viana-BackupMailer Log File         \n"); 
     fwrite($Handle, "================================================================================================\n"); 
     fclose($Handle); 
     file_put_contents($GLOBALS['LogFile'], $LogText, FILE_APPEND | LOCK_EX); 
    } 

    $DB_BackupFile = ($DB_Name == "" ? "all_databases" : $DB_Name)."_$BackupDate.sql.gz"; 
    $CMD = "mysqldump -u $DB_Username -h $DB_Server --password='$DB_Password' ".($DB_Name == "" ? "--all-databases" : $DB_Name)." | gzip > ".$Path.$DB_BackupFile; 
    passthru($CMD); 
    $LogText = date("[Y/m/d H:i:s] (").$DB_BackupFile.") Backup file was CREATED."; 
    WriteLog($LogText); 

    $Mail_Subject = "[$SiteName] Database Backup"; 
    $Mail_Message = "\nYour database backup detail : \n"; 
    $Mail_Message .= "----------------------------------------------------------\n"; 
    $Mail_Message .= "You Site Name : $SiteName\n"; 
    $Mail_Message .= "Your Site Title : $SiteTitle\n"; 
    $Mail_Message .= "Your Database Name : ".($DB_Name == "" ? "All Databases" : $DB_Name)."\n"; 
    $Mail_Message .= "Your Backup File : $DB_BackupFile\n"; 
    $Mail_Message .= "----------------------------------------------------------\n"; 
    $Mail_Message .= "Powered by Yousef Rahimy Akhondzadeh\n\n"; 
    $AttachFile = $Path.$DB_BackupFile; 

    $AttachContent = file_get_contents($AttachFile); 
    $AttachContent = chunk_split(base64_encode($AttachContent)); 
    $Separator = md5(time()); 
    $EOL = "\r\n"; 

    $MailHeader = "From: $Mail_From".$EOL; 
    $MailHeader .= "MIME-Version: 1.0".$EOL; 
    $MailHeader .= "Content-Type: multipart/mixed; boundary=\"".$Separator."\"".$EOL; 
    $MailHeader .= "Content-Transfer-Encoding: 7bit".$EOL; 
    $MailHeader .= "This is a MIME encoded message.".$EOL; 

    $MainBody = "--".$Separator.$EOL; 
    $MainBody .= "Content-Type: text/plain; charset=\"iso-8859-1\"".$EOL; 
    $MainBody .= "Content-Transfer-Encoding: 8bit".$EOL; 
    $MainBody .= $Mail_Message.$EOL; 
    $MainBody .= "--".$Separator.$EOL; 
    $MainBody .= "Content-Type: application/octet-stream; name=\"".$DB_BackupFile."\"".$EOL; 
    $MainBody .= "Content-Transfer-Encoding: base64".$EOL; 
    $MainBody .= "Content-Disposition: attachment".$EOL; 
    $MainBody .= $AttachContent.$EOL; 
    $MainBody .= "--".$Separator."--"; 

    if (mail($Mail_To, $Mail_Subject, $MainBody, $MailHeader)){ 
     if ($DeleteBackup) { 
      unlink($Path.$DB_BackupFile); 
      $LogText = date("[Y/m/d H:i:s] (").$DB_BackupFile.") Backup file was REMOVED from disk.\n"; 
      WriteLog($LogText); 
     } 
     $LogText = date("[Y/m/d H:i:s] (").$DB_BackupFile.") Backup file was SENT to email.\n"; 
     WriteLog($LogText); 
    } 
    else{ 
     $LogText = date("[Y/m/d H:i:s]")."Error on sending email.\n"; 
     WriteLog($LogText); 
     $LogText = date("[Y/m/d H:i:s]").error_get_last()."\n"; 
     WriteLog($LogText); 
    } 
?> 

私を助けてください。おかげさまで

+1

[mysqlデータのPHP定期バックアップ] stackoverflow.com/questions/38916163/php-regular-backup-of-mysql -データ) – e4c5

答えて

0

Viana-BackupMailerでコードを共有できますか? それが(権限の両方)を実行できなかった理由を二つの理由はおそらくあります

  1. アクセス許可は - あなたによって、このPHPファイルを実行するためのいかなる権利/ cronの所有者

  2. ユーザーが存在しない者このファイルを実行すると、フォルダ/ Viana-BackupMailer /にアクセスする権限がないか、/ ORを指定してmysqldumpコマンドを実行します。

関連する問題