Apakah beberapa entri crontab @daily diproses secara berurutan?

22

Saya ingin dua pekerjaan dijalankan setiap hari, secara berurutan, persis seperti yang saya tentukan. Apakah crontab ini andal melakukan apa yang saya inginkan?

@daily job1
@daily job2

Aku menduga mereka menjalankan satu demi satu, tapi saya tidak dapat menemukan jawabannya dengan mencari web atau dari salah manpages ini: cron(1), crontab(1), crontab(5).

Crontab di atas jelas tidak akan melakukan apa yang saya inginkan jika cron menjalankan hal-hal yang dijadwalkan @dailysecara paralel atau dalam urutan yang tidak terduga.

Saya tahu saya bisa membuat satu skrip shell untuk memadamkannya, saya hanya ingin tahu bagaimana seharusnya cron bekerja (dan saya terlalu malas untuk mengumpulkan data uji atau membaca kode sumber).

Cron disediakan oleh cronpaket. OS adalah Ubuntu 10,04 LTS (server).

Adam Monsen
sumber
Apakah Anda tahu cron mana yang disediakan oleh cronpaket? Hampir semua daemon cron yang saya tahu akan menangani ini secara berurutan, dan secara serentak, biasanya pertama mengurai setiap file dalam urutan abjad (meskipun beberapa melakukannya dengan jumlah waktu antara berjalan dalam urutan menaik), dan kemudian pekerjaan di dalam dalam urutan baris.
Chris Down
5
Fakta bahwa itu kurang ditentukan biasanya berarti diserahkan kepada implementasi, dan biasanya lebih baik tidak bergantung pada perilaku seperti itu. Mungkin lebih bersih dan lebih terorganisir untuk menempatkan urutan pekerjaan di mana urutan penting dalam skripnya sendiri dan bukan sebagai entri crontab terpisah.
jw013
@ ChrisDown: Vixie Cron, saya pikir. packages.ubuntu.com/lucid/cron
Adam Monsen
1
Saya sarankan jika Anda benar-benar ingin menjalankannya, buat satu eksekusi satu menit kemudian.
Kevin
@ jw013 dan Kevin: setuju, tapi itu bukan pertanyaan saya.
Adam Monsen

Jawaban:

26

Setelah sekilas melihat sumbernya (dalam pemerasan Debian, yang saya pikir adalah versi yang sama), itu memang terlihat seperti entri dalam file yang diberikan dan dengan waktu yang sama dijalankan secara berurutan. Untuk tujuan ini, @dailydan 0 0 * * *identik (sebenarnya @dailyidentik dengan 0 0 * * *di cron ini).

Saya tidak akan mengandalkan ini di seluruh papan. Ada kemungkinan bahwa suatu hari seseorang akan memutuskan bahwa cron harus menjalankan pekerjaan secara paralel, untuk memanfaatkan CPU 32-core yang memiliki 31 core berjalan idle. Ini mungkin dilakukan ketika menerapkan item todo berusia 20 tahun ini yang ditemui di sumber cron:

Semua ini harus ditandai dan dibatasi-beban; yaitu, alih-alih @hourly yang berarti "0 * * * *" "itu harus berarti" dekat dengan depan setiap jam tetapi tidak sampai beban sistem rendah ". (...) (vix, jan90)

Sangat mudah untuk menulis di @daily job1; job2sini. Jika pekerjaan itu penting, buatlah itu konsekuensi langsung dari apa yang Anda tulis.

Selain itu, membuat pesanan eksplisit menghilangkan risiko bahwa administrator di masa depan akan memesan ulang garis berpikir bahwa itu tidak masalah.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
5

http://ss64.com/osx/crontab.html (serta referensi lainnya) mengatakan bahwa @daily setara dengan

0 0 * * *

yang mengatakan berjalan pada tengah malam. Saya berharap dua baris semacam ini akan diluncurkan sedekat mungkin dengan tengah malam, tanpa jaminan yang akan berjalan lebih dulu. Saya setuju dengan saran jw013 dalam komentarnya:

Fakta bahwa itu kurang ditentukan biasanya berarti diserahkan kepada implementasi, dan biasanya lebih baik tidak bergantung pada perilaku seperti itu. Mungkin lebih bersih dan lebih terorganisir untuk menempatkan urutan pekerjaan di mana urutan penting dalam skripnya sendiri dan bukan sebagai entri crontab terpisah.

Tom Barron
sumber
Ini membantu, terima kasih. Saya setuju saran @ jw013 ini valid, tapi itu bukan pertanyaan yang saya tanyakan. Saya kira saya harus berkonsultasi dengan sumber aktual untuk jawaban definitif, karena ini mungkin, memang, khusus-implementasi.
Adam Monsen
0

@Giles mengomentari penggunaan skrip tunggal ketika diimpor untuk menjalankan sesuatu agar sesuai.

cron.dailyfile tidak menentukan waktu menjalankan. Sudah pengalaman saya bahwa mereka menjalankan serial. Ini masuk akal karena banyak pekerjaan latar belakang yang dapat berjalan di laptop atau sistem lain

Ketika waktu ditentukan, semua pekerjaan yang dijadwalkan untuk menit saat ini dijalankan. Sebaiknya gunakan waktu yang berbeda.

Jika Anda memiliki pekerjaan yang saling eksklusif, biasanya menggunakan file kunci untuk menentukan apakah pekerjaan lain sedang berjalan.

BillThor
sumber
@dailysedikit berbeda dari /etc/cron.daily. Yang pertama adalah sintaks alternatif untuk digunakan dalam crontab. Lihat juga run-parts. Sistem saya gunakan run-partsuntuk menjalankan program di /etc/cron.daily. Menurut halaman run-parts(8)manual, "File dijalankan dalam urutan semacam leksikal dari nama mereka ...".
Adam Monsen