Bahasa Indonesia

Alat pengembang · Generator crontab

Hari dalam sebulan vs hari dalam seminggu di cron: aturan OR yang mengejutkan semua orang

· Cara kerjanya

cron kalender penjadwalan

Dua filter kalender bergabung melalui gerbang OR menjadi satu jadwal
Ilustrasi vektor ToolAcre asli

Ketika kedua kolom hari dibatasi, cron menjalankan pekerjaan jika salah satu cocok. Posting ini menjelaskan aturan dari crontab(5), mengapa aturan itu ada, dan cara mendapatkan jadwal yang dicegahnya.

Laporan ini diterbitkan pada tanggal 1 dan setiap hari Senin — ekspresi 0 9 1 * 1 tidak berarti seperti apa

Ekspresi seperti `0 9 1 * 1` terlihat seperti “09:00 pada hari Senin pertama” jika kolom dua hari dibaca sebagai filter kumulatif. ToolAcre tidak membacanya seperti itu. Dengan hari dalam bulan ditetapkan ke 1 dan hari dalam seminggu ditetapkan ke hari Senin, parser memperingatkan bahwa kondisi mana pun bisa cocok, sehingga jadwal mencakup setiap hari Senin pertama dan setiap hari Senin.

Ini bukanlah preferensi kata-kata kecil. Laporan bulanan dapat dijalankan empat atau lima kali tambahan, dan operasi yang diharapkan hanya dilakukan pada hari Senin juga dapat dijalankan pada hari pertama setiap bulan. Generator menempatkan peringatan “Layak diperiksa” di samping deskripsi sehingga perilaku yang diperluas terlihat sebelum ekspresi disalin ke crontab eksternal.

Aturannya seperti tertulis - jika hari dalam sebulan dan hari dalam seminggu dibatasi, perintah akan dijalankan ketika salah satu bidang cocok

Fungsi `dayMatches` implementasinya menangani empat kasus secara eksplisit. Dua wildcard menerima setiap tanggal; hari wildcard dalam sebulan ditunda ke hari kerja; hari kerja wildcard berubah menjadi hari dalam sebulan; dan dua bidang terbatas mengembalikan logika OR dari kecocokannya. Tes mencakup tanggal yang hanya cocok dengan tanggal tiga belas, hanya hari Jumat dan tidak ada kondisi apa pun.

Deskripsi mempertahankan aturan yang sama. `0 0 13 * 5` diterjemahkan dengan “pada tanggal 13 setiap bulan atau pada hari Jumat,” bukan kata penghubung yang ambigu. Penguraian, pemilihan proses selanjutnya, dan keluaran bahasa Inggris semuanya menggunakan interpretasi yang sama. Perilaku bersama tersebut merupakan bukti yang lebih kuat daripada label bantuan yang terisolasi karena ketidaksepakatan di antara jalur-jalur tersebut akan segera menciptakan pratinjau yang menyesatkan.

Parser mengimplementasikan OR dan memperlihatkan konsekuensinya; hal ini tidak menentukan sejarah peraturan tersebut

Garis besar buku kerja menawarkan alasan historis untuk desain OR, namun repositori ini membuktikan perilaku dan bukan asal usulnya. Komentar kode mengidentifikasi aturan gaya Vixie, dan pengujian menetapkan hasil yang dimodelkan oleh ToolAcre. Dokumen-dokumen tersebut tidak mendokumentasikan siapa yang memilih peraturan tersebut, kapan peraturan tersebut diadopsi atau mengapa penafsiran yang permisif lebih disukai.

Menjaga batasan itu penting dalam penulisan teknis. Pembaca perlu mengetahui secara pasti bagaimana alat ini memperluas ekspresi; mereka tidak memerlukan narasi standar yang diciptakan untuk menggunakannya dengan aman. Jika target penerapan mendokumentasikan semantik hari yang berbeda, manualnya sendiri akan mengungguli pratinjau browser ini. ToolAcre menyatakan dialek yang dihitungnya daripada mengklaim setiap penjadwal setuju.

Contoh praktis: menghitung 0 9 1 * 1 selama satu bulan — hari kebakaran, dibandingkan dengan jadwal yang penulis inginkan

Bayangkan sebuah bulan yang hari pertamanya bukan hari Senin. `0 9 1 * 1` menghasilkan satu putaran pada putaran pertama dan putaran tambahan setiap hari Senin. Jika yang pertama adalah hari Senin, tanggal tersebut masih muncul satu kali karena penelusuran berikutnya mempertimbangkan satu menit kalender, bukan dua pemicu terpisah. Persatuan berubah ukurannya dengan kalender tetapi tidak secara logika.

Anda dapat memeriksa penyatuan tersebut dengan memilih zona waktu dan membaca lima proses berikutnya. Pratinjau dimulai tepat setelah momen saat ini dan mencari tanggal kalender, menerapkan bidang bulan, hari, dan waktu. Tidak menjanjikan bulan tertentu dalam prosa artikel karena daftar langsung bergantung pada kapan dan di mana pembaca melakukan pengecekan.

Solusi perintah Senin pertama bergaya AND berada di luar generator jadwal ini

Rencananya menyarankan untuk menyematkan tes tanggal shell untuk mendapatkan perilaku AND. ToolAcre tidak dapat memverifikasi perintah seperti itu: ia hanya menerima lima bidang jadwal, dan baris lengkap yang disalin berisi placeholder yang dapat dieksekusi. Sintaks shell, persentase pelolosan, ketersediaan perintah, dan perilaku keluar semuanya merupakan bagian dari lingkungan yang pada akhirnya menjalankan pekerjaan.

Dalam generator ini, langkah desain yang aman adalah membiarkan bidang satu hari sebagai `*` kecuali gabungan OR benar-benar dimaksudkan. Untuk persyaratan hari Senin pertama, dokumentasikan bahwa cron lima bidang saja tidak menyatakan perpotongan dalam dialek ini. Pilih dan uji solusi khusus lingkungan secara terpisah daripada menyajikan cuplikan yang tidak dijalankan sebagai jaminan.

Operator penjadwal lainnya tidak diinterpretasikan oleh parser lima bidang ini

Beberapa tata bahasa penjadwal mengekspos operator seperti `#`, `L`, `W` atau `?`, namun parser ini tidak menerima satupun dari mereka. Ia juga menolak enam bidang dan menjelaskan bahwa kontraknya adalah sintaks crontab lima bidang. Oleh karena itu, ekspresi yang berfungsi di produk lain tidak dapat ditempel di sini sebagai bukti bahwa aturan kalender yang sama ada.

Penerjemahan dialek dimulai dengan mengidentifikasi sumber dan tata bahasa target, bukan dengan menghapus tanda baca hingga validasi berhasil. ToolAcre dapat membantu menyusun lima bidang, nama, rentang, daftar, dan langkah biasa target. Artikel tersebut tidak dapat mempertahankan semantik yang dibawa oleh operator yang tidak didukung, dan artikel tersebut dengan sengaja menghindari mendeskripsikan operator asing tersebut seolah-olah diterapkan.

Pelepasan perintah berada di luar tata bahasa khusus ekspresi

Tanda persen dan kutipan perintah muncul setelah jadwal dan berada di luar `parseCron`. Parser membagi satu ekspresi menjadi lima bagian yang dipisahkan spasi; ia tidak pernah membaca pipa shell, perintah tanggal, atau muatan perintah yang lolos. Akibatnya, artikel ini tidak mengajarkan solusi tanda persen meskipun buku kerja mengusulkannya.

Kelalaian itu adalah keputusan yang benar. Alat jadwal tidak boleh menyiratkan bahwa suatu perintah aman karena bidang waktunya divalidasi. Tinjau sintaks perintah dalam implementasi cron dan shell sebenarnya, dengan masukan yang tidak berbahaya dan keluaran yang dapat diamati. Jaga agar hasil generator tetap sesuai dengan aturan kalender yang jelas dipahaminya.

Kesimpulan: batasi bidang satu hari, bukan keduanya — dan penjelasan generator membuat OR terlihat sebelum Anda menyimpan saluran

Jika kedua kolom hari dibatasi, bacalah keduanya sebagai gabungan dan ucapkan “atau” dengan lantang. Lebih baik lagi, periksa peringatan generator dan pengoperasian yang akan datang. Jika tanggal tersebut melebihi yang ditetapkan, kembalikan satu bidang ke `*` dan selesaikan persyaratan yang lebih khusus dengan mekanisme yang didokumentasikan oleh lingkungan target.

Pelajaran intinya bukanlah bahwa cron itu misterius; dua kolom yang berdekatan tidak digabungkan seperti batasan lainnya. ToolAcre memusatkan pengecualian tersebut dalam logika penguraian, deskripsi, dan pratinjau. Gunakan ketiga tampilan tersebut untuk mengetahui ketidakcocokan sebelum ekspresi meninggalkan browser dan menjadi jadwal operasional.