كيفية استخدام تعبيرات Cron لإنشاء مشغلات الوقت في البرنامج النصي للتطبيقات

Cron هي أداة جدولة تساعدك على تشغيل المهام على فترات زمنية متكررة. يمكنك استخدام تعبير cron لتحديد التوقيت الدقيق لمهمتك المجدولة. على سبيل المثال، إذا كنت تريد تشغيل جدول كل يوم من أيام الأسبوع الساعة 8:30 مساءً، فسيبدو تعبير cron كما يلي:
30 20 * * 1-5
تعبيرات كرون
فيما يلي بعض الأمثلة العملية الإضافية لمساعدتك على فهم تعبير cron.
تعبير كرون | وصف |
---|---|
0 0 * * * | كل يوم عند منتصف الليل |
0 */2 * * * | كل ساعتين |
0 10 * * الجمعة، السبت | كل جمعة وسبت الساعة 10 صباحًا |
30 9 */15 * * | الساعة 9:30 صباحًا من كل يوم 15 |
0 0 1 */3 * | اليوم الأول من كل ربع سنة |
مشغلات الوقت في Google Apps Script
يدعم Google Apps Script المشغلات التي تعتمد على الوقت لمساعدتك في تشغيل المهام في الخلفية تلقائيًا. على سبيل المثال، يمكنك إعداد مشغل زمني في Apps Script لإرسال جداول البيانات بالبريد الإلكتروني كل يوم من أيام الأسبوع. أو مشغل لتنزيل رسائل البريد الإلكتروني من Gmail إلى Google Drive.
تشتمل المشغلات المستندة إلى الوقت في Apps Script على قيود معينة، خاصة عندما يتعلق الأمر بإعداد جداول زمنية متكررة. على سبيل المثال، إذا كنت تريد إنشاء مهمة cron بسيطة يتم تشغيلها في نهاية كل أسبوع حوالي الساعة 3 مساءً، فستحتاج إلى إعداد مشغلين منفصلين مثل هذا:
function createTimeTrigger() {
ScriptApp.newTrigger('functionName')
.timeBased()
.everyWeeks(1)
.onWeekDay(ScriptApp.Weekday.SUNDAY)
.atHour(15)
.create();
ScriptApp.newTrigger('functionName')
.timeBased()
.everyWeeks(1)
.onWeekDay(ScriptApp.Weekday.SATURDAY)
.atHour(15)
.create();
}
إن إدارة المحفزات الأكثر تعقيدًا، مثل تلك التي يتم تشغيلها في الساعة 10 مساءً في اليوم الخامس عشر من كل شهر بديل، تصبح أكثر صعوبة. في المقابل، كتابة تعبير cron لهذا أمر واضح تمامًا: 0 22 15 */2 *
. وبالمثل، فإن إنشاء مشغل زمني يعمل في الساعة 10:30 صباحًا في اليوم الأخير من كل شهر قد يتضمن تعليمات برمجية أكثر بكثير من كتابة تعبير cron: 30 10 L * *
يتوافق Google Script مع تعبيرات Cron
تعتبر بنية cron قوية وتدعم الجداول الزمنية المتكررة المعقدة، ولكنها للأسف غير متوفرة داخل Google Apps Script. ولكن لدينا الآن حلاً سهلاً.
يمكننا كتابة جداول تشغيل الوقت في تعبيرات cron مباشرة داخل Apps Script.
قم بتحميل مكتبة Cron Parser
سوف نستخدم الشعبية croner
مكتبة في Apps Script لتحليل تعبيرات cron وحساب الجداول القادمة.
const loadCronLibrary = () => {
const key = 'croner@7';
const url = 'https://cdn.jsdelivr.net/npm/croner@7/dist/croner.umd.min.js';
const cache = CacheService.getScriptCache();
// Check if the library content is already cached
const cachedContent = cache.get(key);
if (cachedContent) return cachedContent;
// Fetch the library content from the specified URL
const libraryContent = UrlFetchApp.fetch(url, {
muteHttpExceptions: false,
}).getContentText();
// Check if the fetched content contains the word "Cron"
if (/Cron/.test(libraryContent)) {
// Cache the libary for 6 hours
cache.put(key, libraryContent, 60 * 60 * 6);
return libraryContent;
}
throw new Error('The cron library is unavailable');
};
إضافة الزناد مع تعبير كرون
بعد ذلك، سنقوم بإنشاء وظيفة تقوم بتحميل مكتبة Cron والتحقق من تعيين مهمة مجدولة للتنفيذ خلال الدقائق الخمس التالية. يستخدم المنطقة الزمنية للبرنامج النصي لمقارنة التواريخ.
const scheduledFunction = () => {
// Run the trigger at 3:45 for the 1st 10 days of every month
const cronExpression = '45 3 1-10 * *';
eval(loadCronLibrary());
const job = Cron(cronExpression);
const timeDifference = (job.nextRun() - new Date()) / (1000 * 60);
if (Math.abs(timeDifference) <= 5) {
Logger.log('Hello, I am running via the time trigger!');
}
};
const addTrigger = () => {
ScriptApp.newTrigger('scheduledFunction').timeBased().everyMinutes(5).create();
};
ال addTrigger
ستنشئ الوظيفة مشغل الوقت الذي من شأنه استدعاء scheduledFunction
كل 5 دقائق. يتم التحقق من جدول cron كل 5 دقائق، وإذا كان من المقرر تشغيله، فسيتم حذفه Hello
سيتم تسجيل الرسالة إلى وحدة التحكم.
اكتشاف المزيد من مرابع التكنولوجيا
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.