2012-06-08 34 views
0

我知道我做錯了沒有包括正確的,完整的文件路徑信息,但經過幾小時的tweeking我仍然得到一個sh: 2012-06-08-01-25.sql.gz: Permission denied mysqldump: Got errno 32 on write錯誤。這裏是我的腳本:Cron作業完整路徑:仍然破損管道錯誤

$dbhost = "DATABASE HOST"; 
$dbuser = "DATABSE USER"; 
$dbpass = 'PASSWORD'; 
$dbname = "DATABASE NAME"; 

$backupfile = '/home/12345/data/backup/'.date("Y-m-dTH:i") . '.sql.gz'; 
system("mysqldump -h $dbhost -u $dbuser --password='$dbpass' $dbname | gzip > $backupfile"); 

$backupfile = $backupfile; 

# To S3 
require('/home/12345/data/backup/S3.php'); 

if (!defined('awsAccessKey')) define('awsAccessKey', 'ACCESS KEY'); 
if (!defined('awsSecretKey')) define('awsSecretKey', 'SECRET KEY'); 

$s3 = new S3(awsAccessKey, awsSecretKey); 

if (!$s3->putObjectFile($backupfile, "BUCKET", 'db-backup/'.$backupfile, S3::ACL_PRIVATE)) { 
    die("104"); 
} 
system("rm $backupfile"); 

該腳本荏苒使用gzip和mysqldump的我的數據庫,然後上傳這個ZIP到一個安全,加密的文件夾上的S3桶。

回答

3

這是關鍵:

sh: 2012-06-08-01-25.sql.gz: Permission denied 

將chown/chgrp添加到具有寫入權限和/或使用chmod修改權限的用戶/組,以便正在執行的用戶/組可以讀取/寫入目標目錄。

管道壞了,因爲它無法寫入文件,權限被拒絕。

+0

這將是'chown'而不是'chmod'。 –

+0

根據您的舒適程度和操作系統的知識,任何一種都可以工作,但大多數人會認爲chown更安全。 –

+0

他們做了兩件不同的事情,有必要使用它們中的每一個來實現其適當的功能。沒有重疊。我建議你閱讀他們的「人」頁面。 –

0

看起來您沒有權限寫入/ home/12345/data/backup。確保權限允許運行Apache的用戶寫入指定的目錄,通過改變文件夾的所有者,以Apache用戶和讀/執行其他人:

chown {*APACHE-USER*} /home/12345/data/backup 
chmod 755 /home/12345/data/backup 
+3

不!不要將權限設置爲777!我想不出在哪種情況下這是正確的做法! –

+0

他正在有效地將此目錄用作上傳到S3的臨時目錄。對我而言有點冒失,但我認爲它會在成功上傳後定期清除。不過,您應該設置最安全的設置權限,具體取決於應該寫入目錄的人員/內容。我更新了我的答案以反映更合適的方法。 –

+0

更改目錄的權限也沒有幫助? –