2016-12-04 154 views
0

我想每天自動執行一個PHP腳本,它們會進行數據庫備份並將其發送到電子郵件。當我通過調用它的URL在我的Web瀏覽器中執行它時,這一切都很好。但是,當我確定我的服務器中的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定期備份MySQL數據](http:// stackoverflow.com/questions/38916163/php-regular-backup-of-mysql -數據) – e4c5

回答

0

你可以在Viana-BackupMailer中分享代碼嗎? 可能有兩個原因,它不能(都與權限)來執行:

  1. 訪問權限 - 有沒有權利通過你執行這個PHP文件/ cron的所有者

  2. 用戶誰執行此php文件沒有權限訪問文件夾/ Viana-BackupMailer /或創建那裏的文件/或運行mysqldump命令