cron adalah alat yang tangguh untuk menjalankan pekerjaan (fungsi atau perintah) pada jadwal yang ditentukan menggunakan sintaks cron.
Sempurna untuk tugas seperti pencadangan data, notifikasi, dan banyak lagi!
jalankan fungsi setiap kali pekerjaan terjadwal Anda terpicu
jalankan pekerjaan di luar proses javascript (seperti perintah sistem) menggunakan child_process
gunakan objek Date atau Luxon DateTime alih-alih sintaks cron sebagai pemicu panggilan balik Anda
gunakan slot tambahan selama beberapa detik (membiarkannya nonaktif akan default ke 0 dan cocok dengan perilaku Unix)
npm instal cron
Fitur
Instalasi
Bermigrasi dari v2 ke v3
Penggunaan Dasar
Pola Cron
Ikhtisar Sintaks Cron
Rentang yang Didukung
mengerti
API
Fungsi Mandiri
Kelas CronJob
Kelas CronTime
Masyarakat
Bergabunglah dengan Komunitas
Berkontribusi
Kontribusi Umum
Mengirimkan Bug/Masalah
Ucapan Terima Kasih
Lisensi
Dengan diperkenalkannya TypeScript di versi 3 dan penyelarasan dengan pola cron UNIX, beberapa perubahan telah dilakukan:
Pengindeksan Bulan: Diubah dari 0-11
menjadi 1-12
. Jadi, Anda perlu menambah semua angka bulan sebanyak 1.
Pengindeksan Harian dalam Seminggu: Dukungan ditambahkan untuk 7
pada hari Minggu.
CronJob
Konstruktor tidak lagi menerima objek sebagai parameter pertama dan satu-satunya. Gunakan CronJob.from(argsObject)
sebagai gantinya.
Callback sekarang dipanggil sesuai urutan pendaftarannya.
nextDates(count?: number)
sekarang selalu mengembalikan array (kosong jika tidak ada argumen yang diberikan). Gunakan nextDate()
sebagai gantinya untuk satu tanggal.
menghapus metode job()
demi new CronJob(...args)
/ CronJob.from(argsObject)
baru
menghapus metode time()
demi new CronTime()
import { CronJob } dari 'cron';const job = new CronJob('* * * * * *', // cronTimefunction () {console.log('Anda akan melihat pesan ini setiap detik');}, // onTicknull , // onCompletetrue, // start'America/Los_Angeles' // timeZone);// job.start() bersifat opsional di sini karena parameter keempat disetel ke true.
// pekerjaan yang setara menggunakan metode statis "dari", menyediakan parameter sebagai pekerjaan objectconst = CronJob.from({cronTime: '* * * * * *',onTick: function () {console.log('Anda akan melihat ini pesan setiap detik');},mulai: true,timeZone: 'Amerika/Los_Angeles'});
Catatan: Pada contoh pertama di atas, parameter keempat pada
CronJob()
memulai pekerjaan secara otomatis. Jika tidak disediakan atau disetel ke falsy, Anda harus memulai pekerjaan secara eksplisit menggunakanjob.start()
.
Untuk contoh lebih lanjut, periksa direktori contoh.
Pola cron adalah tulang punggung perpustakaan ini. Biasakan diri Anda dengan sintaks:
- `*` Asterisks: Any value - `1-3,5` Ranges: Ranges and individual values - `*/2` Steps: Every two units
Pola dan penjelasan rinci tersedia di crontab.org. Contoh dalam tautan memiliki lima bidang, dan 1 menit sebagai perincian terbaik, namun penjadwalan cron kami mendukung format yang disempurnakan dengan enam bidang, memungkinkan presisi tingkat kedua. Alat seperti crontab.guru dapat membantu dalam membangun pola tetapi ingatlah untuk memperhitungkan kolom detik.
Berikut referensi singkat ke format UNIX Cron yang digunakan perpustakaan ini, ditambah kolom kedua yang ditambahkan:
field allowed values ----- -------------- second 0-59 minute 0-59 hour 0-23 day of month 1-31 month 1-12 (or names, see below) day of week 0-7 (0 or 7 is Sunday, or use names)
Nama juga dapat digunakan untuk kolom 'bulan' dan 'hari dalam seminggu'. Gunakan tiga huruf pertama pada hari atau bulan tertentu (huruf besar tidak menjadi masalah). Rentang dan daftar nama diperbolehkan.
Contoh: "senin, rabu, jumat", "jan-mar".
Objek JS Date
dan Luxon DateTime
tidak menjamin presisi milidetik karena penundaan komputasi. Modul ini mengecualikan presisi milidetik untuk sintaks cron standar tetapi memungkinkan spesifikasi tanggal eksekusi melalui objek JS Date
atau Luxon DateTime
. Namun, menentukan waktu eksekusi masa depan yang tepat, seperti menambahkan satu milidetik ke waktu saat ini, mungkin tidak selalu berhasil karena penundaan komputasi ini. Telah diamati bahwa penundaan kurang dari 4-5 ms dapat menyebabkan inkonsistensi. Meskipun kami dapat membatasi semua perincian tanggal menjadi beberapa detik, kami memilih untuk memberikan presisi yang lebih tinggi namun tetap memberi tahu pengguna tentang potensi masalah.
Menggunakan fungsi panah untuk onTick
mengikatnya ke konteks this
induknya. Akibatnya, mereka tidak akan memiliki akses ke konteks cronjob this
. Anda dapat membaca lebih lanjut di edisi #47 (komentar).
sendAt
: Menunjukkan kapan CronTime
akan dijalankan (mengembalikan objek Luxon DateTime
).
import * as cron from 'cron';const dt = cron.sendAt('0 0 * * *');console.log(`Pekerjaan akan dijalankan pada: ${dt.toISO()}`);
timeout
: Menunjukkan jumlah milidetik di masa depan saat CronTime
akan dieksekusi (mengembalikan angka).
import * as cron from 'cron';const timeout = cron.timeout('0 0 * * *');console.log(`Pekerjaan akan berjalan dalam ${timeout}ms`);
constructor(cronTime, onTick, onComplete, start, timeZone, context, runOnInit, utcOffset, unrefTimeout)
:
cronTime
: [DIPERLUKAN] - Waktu untuk menghentikan pekerjaan Anda. Dapat berupa sintaks cron, objek JS Date
, atau objek Luxon DateTime
.
onTick
: [DIPERLUKAN] - Fungsi untuk dijalankan pada waktu yang ditentukan. Jika callback onComplete
diberikan, onTick
akan menerimanya sebagai argumen.
onComplete
: [OPSIONAL] - Dipanggil ketika pekerjaan dihentikan dengan job.stop()
. Ini mungkin juga dipicu oleh onTick
setelah dijalankan.
start
: [OPTIONAL] - Menentukan apakah pekerjaan harus dimulai sebelum konstruktor keluar. Standarnya false
.
timeZone
: [OPSIONAL] - Mengatur zona waktu eksekusi. Standarnya adalah waktu setempat. Periksa format yang valid dalam dokumentasi Luxon.
context
: [OPSIONAL] - Konteks eksekusi untuk metode onTick.
runOnInit
: [OPSIONAL] - Langsung memicu inisialisasi pasca fungsi onTick
. Standarnya false
.
utcOffset
: [OPSIONAL] - Menentukan offset zona waktu dalam hitungan menit. Tidak dapat hidup berdampingan dengan timeZone
.
unrefTimeout
: [OPTIONAL] - Berguna untuk mengendalikan perilaku loop peristiwa. Lebih detailnya di sini.
from
(statis): Buat objek CronJob baru yang memberikan argumen sebagai objek. Lihat nama argumen dan deskripsi di atas.
start
: Memulai pekerjaan.
stop
: Menghentikan pekerjaan.
setTime
: Memodifikasi waktu untuk CronJob
. Parameter harus berupa CronTime
.
lastDate
: Memberikan tanggal eksekusi terakhir.
nextDate
: Menunjukkan tanggal berikutnya yang akan mengaktifkan onTick
.
nextDates(count)
: Menyediakan serangkaian tanggal mendatang yang akan memulai onTick
.
fireOnTick
: Memungkinkan modifikasi perilaku panggilan onTick
.
addCallback
: Mengizinkan penambahan panggilan balik onTick
.
constructor(time, zone, utcOffset)
:
time
: [DIPERLUKAN] - Waktu untuk memulai pekerjaan Anda. Menerima sintaks cron atau objek JS Date.
zone
: [OPTIONAL] - Setara dengan timeZone
dari parameter CronJob
.
utcOffset
: [OPTIONAL] - Analog dengan utcOffset
dari parameter CronJob
.
Bergabunglah dengan server Perselisihan! Di sini Anda dapat mendiskusikan masalah dan mendapatkan bantuan di forum yang lebih santai daripada GitHub.
Proyek ini sedang mencari bantuan! Jika Anda tertarik untuk membantu proyek ini, silakan lihat dokumentasi kontribusi kami.
Silakan lihat dokumentasi kontribusi kami, yang berisi semua informasi yang perlu Anda ketahui sebelum mengirimkan masalah.
Ini adalah proyek upaya komunitas. Sebenarnya, proyek ini dimulai sebagai proyek sumber terbuka dari cron.js dan berkembang menjadi proyek lain. Orang lain telah menyumbangkan kode, waktu, dan pengawasan untuk proyek ini. Saat ini masih terlalu banyak untuk disebutkan di sini, jadi kami hanya mengucapkan terima kasih.
Terima kasih khusus kepada Hiroki Horiuchi, Lundarl Gholoi, dan koooge atas pekerjaan mereka pada pengetikan PastiDiketik sebelum diimpor di v2.4.0.
MIT