Bahasa Melayu

Alat pembangun · Penjana Crontab

Hari dalam bulan lwn hari dalam minggu dalam cron: peraturan ATAU yang mengejutkan semua orang

· Bagaimana ia berfungsi

cron kalendar penjadualan

Dua penapis kalendar bercantum melalui get OR ke dalam satu jadual
Ilustrasi vektor ToolAcre asal

Apabila kedua-dua medan hari dihadkan, cron menjalankan tugas jika mana-mana padanan. Siaran ini menerangkan peraturan daripada crontab(5), sebab ia wujud dan cara mendapatkan jadual yang dihalangnya.

Laporan itu dijalankan pada 1hb dan pada setiap hari Isnin — ungkapan 0 9 1 * 1 tidak bermakna rupanya

Ungkapan seperti `0 9 1 * 1` kelihatan seperti "09:00 pada hari Isnin pertama" jika lajur dua hari dibaca sebagai penapis kumulatif. ToolAcre tidak membacanya dengan cara itu. Dengan hari dalam bulan ditetapkan kepada 1 dan hari dalam minggu ditetapkan kepada Isnin, penghurai memberi amaran bahawa mana-mana keadaan boleh sepadan, jadi jadual termasuk setiap hari Isnin pertama dan setiap hari Isnin.

Ini bukan pilihan perkataan kecil. Laporan bulanan boleh dijalankan empat atau lima kali tambahan, dan operasi yang dijangka sahaja pada hari Isnin juga boleh dijalankan pada bulan pertama. Penjana meletakkan amaran "Bernilai disemak" di sebelah perihalan supaya gelagat yang dikembangkan dapat dilihat sebelum ungkapan disalin ke crontab luaran.

Peraturan seperti yang ditulis — jika kedua-dua hari dalam bulan dan hari dalam minggu dihadkan, arahan akan dijalankan apabila mana-mana medan sepadan

Fungsi `dayMatches` pelaksanaan mengendalikan empat kes secara eksplisit. Dua kad bebas menerima setiap tarikh; hari kad liar dalam bulan menangguhkan kepada hari bekerja; hari minggu kad bebas menangguhkan kepada hari dalam bulan; dan dua medan terhad mengembalikan ATAU logik padanan mereka. Ujian merangkumi tarikh yang sepadan sahaja pada ketiga belas, sahaja Jumaat dan tiada syarat.

Perihalan mengekalkan peraturan yang sama. `0 0 13 * 5` diterjemahkan dengan "pada 13 haribulan atau pada hari Jumaat", bukan kata hubung yang tidak jelas. Penghuraian, pemilihan larian seterusnya dan output bahasa Inggeris semuanya menggunakan tafsiran yang sama. Tingkah laku yang dikongsi itu adalah bukti yang lebih kukuh daripada label bantuan terpencil kerana perselisihan antara laluan tersebut akan mewujudkan pratonton yang mengelirukan serta-merta.

Penghurai melaksanakan OR dan mendedahkan akibatnya; ia tidak menetapkan sejarah peraturan

Garis besar buku kerja menawarkan sebab sejarah untuk reka bentuk OR, tetapi repositori ini membuktikan tingkah laku dan bukannya asal. Komen kod mengenal pasti peraturan gaya Vixie dan ujian menetapkan keputusan yang dimodelkan oleh ToolAcre. Mereka tidak mendokumenkan siapa yang memilih peraturan, bila ia diterima pakai atau mengapa tafsiran permisif diutamakan.

Menjaga sempadan itu penting dalam penulisan teknikal. Pembaca perlu mengetahui dengan tepat bagaimana alat ini mengembangkan ungkapan; mereka tidak memerlukan naratif piawai yang dicipta untuk menggunakannya dengan selamat. Jika sasaran penempatan mendokumenkan semantik hari yang berbeza, manualnya sendiri mengatasi pratonton pelayar ini. ToolAcre menyatakan dialek yang dikira dan bukannya menuntut setiap penjadual bersetuju.

Contoh yang berjaya: menghitung 0 9 1 * 1 selama satu bulan — hari ia menyala, berbanding dengan jadual yang penulis inginkan

Pertimbangkan bulan yang hari pertamanya bukan hari Isnin. `0 9 1 * 1` menghasilkan satu larian pada larian pertama dan tambahan pada setiap hari Isnin. Jika yang pertama ialah hari Isnin, tarikh itu masih muncul sekali kerana carian yang dijalankan seterusnya mengambil kira satu minit kalendar, bukan dua pencetus berasingan. Kesatuan berubah dalam saiz dengan kalendar tetapi tidak dalam logik.

Anda boleh memeriksa kesatuan itu dengan memilih zon waktu dan membaca lima larian seterusnya. Pratonton bermula dengan ketat selepas segera semasa dan mencari tarikh kalendar, menggunakan medan bulan, hari dan masa. Ia tidak menjanjikan bulan tertentu dalam prosa artikel kerana senarai langsung bergantung pada masa dan tempat pembaca melakukan semakan.

Penyelesaian arahan Isnin pertama gaya AND berada di luar penjana jadual ini

Pelan itu mencadangkan untuk membenamkan ujian tarikh shell untuk mendapatkan gelagat AND. ToolAcre tidak boleh mengesahkan perintah sedemikian: ia sahaja menerima lima medan jadual dan baris penuh yang disalin mengandungi pemegang tempat boleh laku. Sintaks Shell, peratus pelepasan aksara, ketersediaan arahan dan gelagat keluar semuanya tergolong dalam persekitaran yang akhirnya menjalankan tugas.

Dalam penjana ini, langkah reka bentuk yang selamat ialah meninggalkan medan satu hari sebagai `*` melainkan kesatuan OR dimaksudkan dengan sebenar-benarnya. Untuk keperluan Isnin pertama, dokumen bahawa cron lima medan sahaja tidak menyatakan persilangan dalam dialek ini. Pilih dan uji penyelesaian khusus persekitaran secara berasingan dan bukannya membentangkan coretan yang tidak dilaksanakan seperti yang dijamin.

Pengendali penjadual lain tidak ditafsirkan oleh penghurai lima medan ini

Sesetengah tatabahasa penjadual mendedahkan pengendali seperti `#`, `L`, `W` atau `?`, tetapi penghurai ini tidak menerima satu pun daripada mereka. Ia juga menolak enam medan dan menjelaskan bahawa kontraknya ialah sintaks crontab lima medan. Oleh itu ungkapan yang berfungsi dalam produk lain tidak boleh ditampal di sini sebagai bukti bahawa peraturan kalendar yang sama wujud.

Terjemahan dialek bermula dengan mengenal pasti sumber dan tatabahasa sasaran, bukan dengan memadamkan tanda baca sehingga pengesahan berjaya. ToolAcre boleh membantu membina lima medan biasa, nama, julat, senarai dan langkah sasaran. Ia tidak boleh mengekalkan semantik yang dibawa oleh pengendali yang tidak disokong, dan artikel tersebut sengaja mengelak daripada menggambarkan pengendali asing tersebut seolah-olah ia dilaksanakan.

Perintah pelepasan aksara adalah di luar tatabahasa ungkapan sahaja

Tanda peratusan dan petikan arahan muncul selepas jadual dan berada di luar `parseCron`. Penghurai membahagikan satu ungkapan kepada lima bahagian yang dipisahkan ruang kosong; ia tidak pernah membaca saluran paip shell, arahan tarikh atau muatan arahan yang terlepas. Akibatnya, artikel ini tidak mengajar penyelesaian tanda peratus walaupun buku kerja mencadangkannya.

Peninggalan itu adalah keputusan yang betul. Alat jadual tidak seharusnya membayangkan bahawa arahan adalah selamat kerana medan masanya mengesahkan. Semak sintaks arahan dalam pelaksanaan cron dan shell sebenar, dengan input yang tidak berbahaya dan output yang boleh diperhatikan. Pastikan hasil penjana diskop kepada peraturan kalendar yang difahami dengan jelas.

Bawa pulang: hadkan medan satu hari, bukan kedua-duanya — dan penjelasan penjana menjadikan ATAU kelihatan sebelum anda menyimpan talian

Apabila kedua-dua medan hari dihadkan, bacanya sebagai kesatuan dan sebut "atau" dengan kuat. Lebih baik lagi, periksa amaran penjana dan larian akan datang. Jika tarikh tersebut melebihi set yang dimaksudkan, kembalikan satu medan ke `*` dan selesaikan sebarang keperluan yang lebih khusus dengan mekanisme yang didokumenkan oleh persekitaran sasaran.

Pengajaran teras bukanlah bahawa cron adalah misteri; ialah dua lajur bersebelahan tidak bergabung seperti sekatan yang lain. ToolAcre memusatkan pengecualian itu dalam penghuraian, penerangan dan logik pratonton. Gunakan tiga paparan tersebut untuk menangkap ketidakpadanan sebelum ungkapan meninggalkan pelayar dan menjadi jadual operasi.