Yedek Zamanlamaları
Yedek zamanlamalarını kuran ve alınmış yedekleri yöneten dokuz uç.
Genel Bakış
Bu dokuz uç iki şeyi yönetir. Beşi zamanlamaları kurar: hangi içerik, ne sıklıkta, hangi hedefe. Dördü ise alınmış yedeklerin kendisiyle ilgilenir.
Bir zamanlama yalnız bir niyettir. Yedeği asıl üreten, sırası gelince işi alan zamanlanmış görevdir. Bu yüzden yazma çağrıları hemen sonuç döndürmez: iş sıraya girer, kayıt açılır ve durum zamanla ilerler.
Yedeklerin nereye gideceği ayrı bir konudur. Hedefler kendi uçlarıyla kurulur; buradaki storage_id yalnız onlardan birini işaret eder.
Referans
Zamanlamaları Listeleme
Tanımlı yedek zamanlamalarını döndürür.
hourly, daily, weekly, monthly.database, files, uploads.curl 'https://panel.ornek.com/api/v1/admin/settings/backup/schedules' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/backup/schedules', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/schedules');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Sonraki calisma ani KAPALI zamanlamada da dolu gorunur; durumu ayrica okuyun.
$due = array_filter(
Api::Settings()->GetBackupSchedules()['data'],
fn ($s) => $s['status'] === 'enabled',
);Zamanlama Oluşturma
Yeni bir yedek zamanlaması kurar.
database, files, uploads. En az biri gerekir.hourly, daily, weekly, monthly. Öntanımlı günlük.curl -X POST 'https://panel.ornek.com/api/v1/admin/settings/backup/schedules' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"name":"Gecelik veritabani","frequency":"daily","run_time":"03:00","contents":["database"],"status":1}'const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/backup/schedules', {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Nightly database',
frequency: 'daily',
run_time: '03:00',
contents: ['database'],
status: 1,
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/schedules');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Nightly database',
'frequency' => 'daily',
'run_time' => '03:00',
'contents' => ['database'],
'status' => 1,
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Durumu VERMEZSENIZ zamanlama kapali dogar ve hicbir gece calismaz.
Api::Settings()->CreateBackupSchedule([
'name' => 'Nightly database',
'contents' => ['database'],
'status' => 1,
]);Zamanlama Detayı
Tek bir zamanlamayı döndürür.
hourly, daily, weekly, monthly.database, files, uploads.curl 'https://panel.ornek.com/api/v1/admin/settings/backup/schedules/4' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/settings/backup/schedules/${id}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/schedules/' . $id);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Gun alanlari siklikla ESLESMIYORSA dolu gorunur ama hicbir ise yaramaz.
$s = Api::Settings()->GetBackupSchedule(['id' => $id])['data'];
$day = $s['frequency'] === 'weekly' ? $s['run_dow'] : null;Zamanlamayı Güncelleme
Zamanlamayı değiştirir; zamanı etkileyen alan değişirse sonraki çalışma yeniden hesaplanır.
database, files, uploads. En az biri gerekir.hourly, daily, weekly, monthly. Öntanımlı günlük.curl -X PATCH 'https://panel.ornek.com/api/v1/admin/settings/backup/schedules/4' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"run_time":"04:30","retention_count":14}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/settings/backup/schedules/${id}`, {
method: 'PATCH',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ run_time: '04:30', retention_count: 14 }),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/schedules/' . $id);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['run_time' => '04:30', 'retention_count' => 14]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Gondermediginiz alan KORUNUR; saati degistirmek sonraki calismayi kaydirir.
Api::Settings()->UpdateBackupSchedule([
'id' => $id,
'run_time' => '04:30',
]);Zamanlamayı Silme
Zamanlamayı kaldırır ve geçmişteki yedeklerin bağını koparır.
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/settings/backup/schedules/4' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/settings/backup/schedules/${id}`, {
method: 'DELETE',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/schedules/' . $id);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Yedekler SILINMEZ, yalniz zamanlama bagi kopar; dosyalar yerinde kalir.
Api::Settings()->DeleteBackupSchedule(['id' => $id]);Yedekleri Listeleme
Alınmış yedeklerin geçmişini döndürür.
curl 'https://panel.ornek.com/api/v1/admin/settings/backup/backups' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/backup/backups', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/backups');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Hazir bir yedegin uzak kopyasi YINE DE dusmus olabilir: iki durumu birlikte okuyun.
$risky = array_filter(
Api::Settings()->GetBackups()['data'],
fn ($b) => $b['status'] === 'ready' && $b['upload_status'] === 'failed',
);Elle Yedek Alma
Zamanlamayı beklemeden bir yedek işini sıraya alır.
database, files, uploads.details.critical eksik olanları listeler: zlib ve/veya spl.curl -X POST 'https://panel.ornek.com/api/v1/admin/settings/backup/backups' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"contents":["database","files"],"storage_id":0}'const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/backup/backups', {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
contents: ['database', 'files'],
storage_id: 0,
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/backups');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'contents' => ['database', 'files'],
'storage_id' => 0,
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Ayni anda TEK yedek calisir: gece penceresine denk gelen istek reddedilir.
$id = Api::Settings()->CreateManualBackup([
'contents' => ['database'],
])['data']['backup_id'];Yedeği Yeniden Deneme
Düşmüş bir yedeği yeniden sıraya alır. Arşiv diskte duruyor ve yalnız aktarım başarısız olduysa yalnız yükleme tekrarlanır; aksi hâlde yedek baştan alınır ve başarısız denemenin yerel yedek klasöründe bıraktığı arşiv silinir.
details.critical eksik olanları listeler: zlib ve/veya spl. Yalnız yedek baştan kurulacaksa denetlenir; yalnız yüklemenin tekrarlandığı denemede atlanır.curl -X POST 'https://panel.ornek.com/api/v1/admin/settings/backup/backups/91/retry' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/settings/backup/backups/${id}/retry`, {
method: 'POST',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/backups/' . $id . '/retry');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Gonderimi dusmus ama kendisi HAZIR bir yedek buradan yeniden denenemez.
if ($backup['status'] === 'failed')
Api::Settings()->RetryBackup(['id' => $backup['id']]);Yedeği Silme
Yedek kaydını, bekleyen işini ve dosyalarını kaldırır. running durumundaki yedek sinyal vermeye devam ederken reddedilir; son sinyali 30 dakikadan eskiyse satır terk edilmiş sayılır ve diğerleri gibi silinir.
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/settings/backup/backups/91' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/settings/backup/backups/${id}`, {
method: 'DELETE',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/backups/' . $id);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Calisan yedek silinemez; once bitmesini bekleyin, iptal eden bir uc YOKTUR.
Api::Settings()->DeleteBackup(['id' => $id]);Tuzaklar
Durum alanını göndermezseniz zamanlama kapalı oluşur. Listede görünür, sonraki çalışma anı bile dolu gelir, ama hiçbir gece çalışmaz. Kurduktan sonra çalıştığını sanıp aylar sonra yedeksiz kalmak buradan gelir; oluştururken durumu birlikte gönderin.
Bir yedek çalışırken elle yedek alma ve yeniden deneme çağrıları reddedilir. Gece penceresine denk gelen bir betik bunu hata sanır. Yanıt kalıcı bir sorunu değil, o anki meşguliyeti anlatır: bir süre sonra yeniden deneyin.
Yedeğin kendi durumu ile hedefe gönderim durumu ayrı alanlardır. Bir yedek hazır görünürken uzak kopyası düşmüş olabilir: arşiv sunucuda durur, hedefte hiç yoktur. Sunucuyu kaybettiğiniz gün asıl önemli olan ikinci alandır, o yüzden ikisini birlikte okuyun.
Yeniden deneme ucu, durumu düşmüş olmayan bir yedekte reddeder. Gönderimi başarısız olmuş ama kendisi hazır kalmış bir yedek de bu kapıdan geçemez; oradaki eksik uzak kopyadır, yedeğin kendisi değil. O durumda yeni bir yedek almak gerekir.
Zamanlama silinince ürettiği yedeklerin bağı kopar, kendileri durur. Dosyalar yerinde kalır ve saklama sayısı artık onları kimseye saydırmaz. Yer açmak istiyorsanız yedekleri tek tek silmeniz gerekir; yedeği silmek bekleyen işini iptal eder ve dosyalarını kaldırır.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.