利用 cPanel Cron jobs 自動備份
虛擬主機cPanel,有相當好用的全站備份功能。但是你想有一個完整的備份,你必須登錄到的cPanel,然後擊備份按鈕,等備份完成,然後再下載...
這些步驟是不是能自動化呢? 你需要的是使用Cron jobs功能
操作方式
1.複製以下程式碼
<?php
$auth = base64_encode("cPanel帳號:cPanel密碼");
$domain = "cPanel網址";
$theme = "https://";
$secure = true;
$ftp = false;
$ftpserver = "";
$ftpusername = "";
$ftppassword = "";
$ftpport = "21";
$ftpdirectory = "/";
if ($secure) {
$url = "ssl://" . $domain;
$port = 2083;
} else {
$url = $domain;
$port = 2082;
}
$socket = fsockopen($url, $port);
if (!$socket) {
exit("Failed to open socket connection.");
}
if ($ftp) {
$params = "dest=ftp&server=$ftpserver&user=$ftpusername&pass=$ftppassword&port=$ftpport&rdir=$ftpdirectory&submit=Generate Backup";
} else {
$params = "submit=Generate Backup";
}
fputs($socket, "POST /frontend/" . $theme . "/backup/dofullbackup.html?" . $params . " HTTP/1.0\r\n");
fputs($socket, "Host: $domain\r\n");
fputs($socket, "Authorization: Basic $auth\r\n");
fputs($socket, "Connection: Close\r\n");
fputs($socket, "\r\n");
while (!feof($socket)) {
$response = fgets($socket, 4096);
echo $response;
}
fclose($socket);
?>
以上程式碼儲存成backup.php,上傳到根目錄中
2.設定Cron jobs
看你是想要每天執行還是每周,設好時間後
1 | 指令為 php -f ~/backup.php |
就醬子!完成了^^
3.定期刪除備份檔
經過一段時間,在網站空間目錄裡一定有很多的備份檔
避免占用我們的空間,所以我們可以建立一個Cron jobs來定期刪除備份檔
例如:定期刪除30天以前的備份檔程式碼:
<?php
$files = glob("*.tar.gz");
foreach($files as $file) {
if(is_file($file)
&& time() - filemtime($file) >= 30*24*60*60) { // 30 days
unlink($file);
}
}
?>
您好喔,我將 backup.php 上傳至 cPanel 帳號的根目錄(非public_html),設定 cron job 後並沒有如預期中的執行備份,是不是有版本或是其他限制呢?
我知道排程有啟動,只是沒有備份並沒有執行成功,因為 cPanel 預設 webmail 中有收到主旨為 "Cron php -q /home/myaccount/backup.php" 的信件,內容看不懂,如下:
(上述 myhost 與 myaccount 為範例名稱)
HTTP/1.1 301 Moved
Connection: close
Content-length: 141
Location: /frontend/https:/backup/dofullbackup.html?submit=Generate
Content-type: text/html; charset="utf-8"
Cache-Control: no-cache, no-store, must-revalidate, private
Pragma: no-cache
您好,這角本目前我已沒在使用了。
cPanel是租用的嗎?有些主機商會鎖一些指令,可以詢問對方工程師看看。
另外大部分的主機商都已有提供每天備份的服務了。