Ana içeriğe geç

Örnekler


{% include multiplex.html %}

Tarihleri Bulma

ipucu

Aşağıdaki kod, belirli zaman dilimlerinde tarihleri bulmanın yollarını göstermektedir.

// Gelecek ayı bul
const nextMonth = new Cron("@monthly").nextRun(),
nextSunday = new Cron("@weekly").nextRun(),
nextSat29feb = new Cron("0 0 0 29 2 6", { legacyMode: false }).nextRun(),
nextSunLastOfMonth = new Cron("0 0 0 L * 7", { legacyMode: false }).nextRun(),
nextLastSundayOfMonth = new Cron("0 0 0 * * L7").nextRun();

console.log("Gelecek ayın ilk günü: " + nextMonth.toLocaleDateString());
console.log("Gelecek pazar: " + nextSunday.toLocaleDateString());
console.log("Gelecek cumartesi, 29 Şubat: " + nextSat29feb.toLocaleDateString()); // 2048-02-29
console.log("Gelecek ayın pazar ile bitişi: " + nextSunLastOfMonth.toLocaleDateString());
console.log("Gelecek ayın son pazar günü: " + nextLastSundayOfMonth.toLocaleDateString());

İş Kontrolleri

bilgi

Cron işleri için durdurma ve devam ettirmenin nasıl yapıldığını öğrenin.

const job = new Cron('* * * * * *', (self) => {
console.log('Bu her saniyede çalışacak. 10. saniyede duracak. 15. saniyede devam edecek. 20. saniyede duracak.');
console.log('Mevcut saniye: ', new Date().getSeconds());
console.log('Önceki çalışma: ' + self.previousRun());
console.log('Gelecek çalışma: ' + self.nextRun());
});

new Cron('10 * * * * *', {maxRuns: 1}, () => job.pause());
new Cron('15 * * * * *', {maxRuns: 1}, () => job.resume());
new Cron('20 * * * * *', {maxRuns: 1}, () => job.stop());

Seçenekler

import { Cron } from "./dist/croner.js";

const job = new Cron(
'* * * * *',
{
startAt: "2023-11-01T00:00:00",
stopAt: "2023-12-01T00:00:00",
timezone: "Europe/Stockholm"
},
function() {
console.log('Bu her dakika çalışacak, 2023-11-01 den 2023-12-01 00:00:00 e kadar');
}
);

console.log('İlk kez ne zaman çalışacak', job.nextRun().toLocaleString());

Aralık

tehlike

Zaman dilimlerini ayarlarken dikkatli olun; yanlış ayarlamalar beklenmeyen sonuçlar verebilir.

// Özel bir aralıkta, cron ifadesi ile birlikte tetikleme
new Cron('* * 7-16 * * MON-FRI', { interval: 90 }, function () {
console.log('Bu her 90. saniyede, pazartesiden cumaya 7-16 saatleri arasında tetiklenecektir.');
});

Bağlam Geçirme

const data = {
what: "şeyler"
};

new Cron('* * * * * *', { context: data }, (_self, context) => {
console.log('Bu şeyleri yazdıracak: ' + context.what);
});

new Cron('*/5 * * * * *', { context: data }, (self, context) => {
console.log('Bundan sonra, diğer şeyler yazdırılacaktır');
context.what = "diğer şeyler";
self.stop();
});

Belirli bir tarih/saatte tetikleme

not

ISO 8601 formatındaki zaman dizeleri kullanılarak spesifik tarih ve saatte tetikleme yapılabilir.

// Bir javascript tarihi veya bir ISO 8601 yerel zaman dizesi geçilebilir, bir fonksiyonu bir kez tetiklemek için.
// ISO 8601 zaman dizesinin hangi zaman diliminde olduğunu belirtmek için zaman dilimi seçeneği ile belirtin.
let job = new Cron("2025-01-01T23:00:00",{timezone: "Europe/Stockholm"},() => {
console.log('Bu 2025-01-01 23:00:00 tarihinde, Avrupa/Stockholm zaman diliminde çalışacak');
});

if (job.nextRun() === null) {
// İş bir nedenle tetiklenmeyecek
} else {
console.log("İş şurada tetiklenecek: " + job.nextRun());
}

Zaman dilimi

let job = new Cron("0 0 14 * * *", { timezone: "Europe/Stockholm" }, () => {
console.log('Bu her gün 14:00’de Avrupa/Stockholm zaman diliminde çalışacak');
});

if (job.nextRun() === null) {
// İş bir nedenle tetiklenmeyecek
} else {
console.log("İş şurada tetiklenecek: " + job.nextRun());
}

İşleri İsimlendirme

Eğer işi { name: '...' } seçeneğini kullanarak bir isim ile sağlarsanız, işin bir referansı dışa aktarılan scheduledJobs dizisinde saklanacaktır.

Eğer bir iş .stop() kullanılarak durdurulursa, scheduledJobs dizisinden kaldırılacaktır.

// import { Cron, scheduledJobs } ...

// Kapsamlı iş
(() => {

// İş için bir isim belirttiğimizde, `scheduledJobs` içinde bir referans tutulacaktır
const job = new Cron("* * * * * *", { name: "Job1" }, function () {
console.log("Bu her saniyede çalışacak");
});

job.pause();
console.log("İş durduruldu");

})();

// Başka bir kapsam, 5 saniye gecikti
setTimeout(() => {

// İşimizi bul
// - scheduledJobs ayrı olarak { Cron, scheduledJobs } şeklinde içe aktarılabilir
// veya Cron.scheduledJobs üzerinden erişilebilir
const job = scheduledJobs.find(j => j.name === "Job1");

// Devam ettir
if (job) {
if(job.resume()) {
// Bu gerçekleşecek
console.log("İş başarıyla devam ettirildi");
} else {
console.log("İş bulundu, ancak yeniden başlatılamadı. Bu asla olmamalıdır, çünkü isimli işler `.stop()` kullanıldığında _kaldırılır_.");
}
} else {
console.error("İş bulunamadı");
}

}, 5000);

Tamamlandığında hareket et

// Her 5. saniyede bir kez tetiklenen bir işi başlat, en fazla 3 kez çalışsın
const job = new Cron("0/5 * * * * *", { maxRuns: 3 }, (job) => {

// İş yap
console.log('İş Çalışıyor');

// Bu son yürütme mi?
if (!job.nextRun()) {
console.log('Son yürütme');
}

});

// Hiçbir yürütmenin olmayacağını mı?
// Bu, maxRuns'ı 0'a ayarladığınızda veya
// imkansız bir cron ifadesi oluşturduğunuzda tetiklenecektir.
if (!job.nextRun() && !job.previousRun()) {
console.log('Hiç yürütme planlanmadı');
}

Hata işleme

// Bir hata işleyici hazırlayın
const errorHandler = (e) => {
console.error(e);
};

// Her saniyede bir işi başlat
const job = new Cron("* * * * * *", { catch: errorHandler }, (job) => {
console.log('Bu yazdıracak!');
throw new Error("Bu hata işleyici tarafından yakalanacak ve yazdırılacak");
console.log('Bu yazdırılmayacak, ancak iş tetiklenmeye devam edecek');
});

Aşırı çalışma koruması

// Demo bloklama fonksiyonu
const blockForAWhile = (ms) => new Promise(resolve => setTimeout(resolve, ms));

// (Opsiyonel) Bloklu bir çağrıda tetiklenecek geri çağırma
const protectCallback = (job) => console.log(`Tarih ${new Date().toISOString()} çağrısı, ${job.currentRun().toISOString()} tarihinden başlatılan çağrı tarafından engellendi`);

// protect: aşırı çalışma korumasını etkinleştirmek için ya true ya da bir geri çağırma fonksiyonu olarak ayarlanabilir
new Cron("* * * * * *", { protect: protectCallback }, async (job) => {
console.log(`${job.currentRun().toISOString()} tarihinde başlatılan çağrı başladı`);
await blockForAWhile(4000);
console.log(`${job.currentRun().toISOString()} tarihinde başlatılan çağrı sona erdi ${new Date().toISOString()}`);
});

/* Çıktı
${job.currentRun().toISOString()} tarihinde başlatılan çağrı başladı
${job.currentRun().toISOString()} tarihinde başlatılan çağrı tarafından engellendi
...
${job.currentRun().toISOString()} tarihinde başlatılan çağrı sona erdi
*/