
我有一個 shell / bash 非常適合製作備份腳本,問題是我有大文件,導致運行腳本時出現問題。該腳本具有 q 按格式壓縮檔案tar.gz
並且它執行了此操作,但是當檔案達到 6GB + 時,或者腳本繼續壓縮檔案但它進入下一行並且備份失敗,伺服器必須set_time_limit;
在 php 中有一個相等的,我使用了呼叫shell/bash 的php 文件set_time_limit (0);
,並且運行得很好,shell/bash 也有一些東西嗎?
劇本:
MYSQLDUMP="$(which mysqldump)"
$MYSQLDUMP -u $DBUSER -h $DBHOST -p$DBPASS $DBNAME | gzip > $TIMESTAMP.sql.gz
ssh $USER_SSH@$HOST_SSH "tar -zcf - $HOME" > $TIMESTAMP.backup.tar.gz
tar -zcf $TIMESTAMP.tar.gz $TIMESTAMP.backup.tar.gz $TIMESTAMP.sql.gz
SUCCESS=$?
rm $TIMESTAMP.sql.gz
rm $TIMESTAMP.backup.tar.gz
我沒有發布變量,因為我認為沒有必要
在完成 tar 之前,它會刪除最後幾行的 2 個檔案...如果檔案小於 6GB 或 7GB,則不會發生這種情況
答案1
首先,了解如何呼叫 php 腳本會很方便。其次,您可以讓 bash/shell 腳本執行此操作,而不是讓 php 腳本執行 mysql 轉儲,而您的 php 腳本所做的只是呼叫它。
現在,既然您的 php 腳本已連接到 mysql,那麼您可以透過對目前腳本進行最小的修改來做什麼。而不是讓 php 腳本等待 bash 腳本。只需讓 php 呼叫 bash 腳本並忘記它,這樣您就不必擔心需要多長時間。
在你的 bash 腳本中,讓它更新 mysql 中的一行,說明壓縮完成後成功或失敗,如果你讓 bash 腳本執行轉儲,它會比讓 php 腳本執行 IE 更安全,你的憑證DB 永遠無法通過網路訪問,我建議也為php 產生ssh 的私鑰。然後,您可以稍後使用不同的腳本讓 php 檢查它,然後透過檢查資料庫的結果來執行其他一些操作,例如直觀地報告它是否成功等。
有很多不同的方法可以解決這個問題,從使用 PHP 和幾個不同的腳本,到使用 bash 做更多的事情,甚至包括其他語言(如 javascript)來幫助動態更新頁面的結果,這樣你就不必刷新等等