Bagaimana penjadwalan cron benar-benar diimplementasikan dan memastikan skrip berjalan tepat waktu?

9

Saya ingin bertanya tentang pekerjaan cron. OK, kami menempatkan skrip di crontab dan cron daemon mengeksekusinya.

Sekarang jika saya mengerti ini, setiap menit, cron memeriksa crontab setiap pengguna dan menjalankan skrip yang dikonfigurasi. Tetapi bagaimana ini sebenarnya dilakukan? Apakah itu memotong proses anak dll?

Itu tidak dapat menjalankan tugas secara berurutan karena waktunya akan hilang (misalnya karena menunggu skrip yang berjalan lama untuk menyelesaikan). Jadi bagaimana ini sebenarnya diterapkan.

Hanya untuk membantu, saya tidak mencari kode tingkat rendah. Deskripsi tingkat tinggi (dari algoritme mungkin?) Atau bagaimana ini diterapkan di sebagian besar distro sudah cukup bagi saya.

Jim
sumber

Jawaban:

9

Saya menemukan T&J ini berakhir di StackOverflow berjudul: Bagaimana cara cron menjadwalkan pekerjaan secara internal? .

kutipan dari posting itu & artikel wikipedia di cron

The algorithm used by this cron is as follows:

1. On start-up, look for a file named .crontab in the home directories of 
   all account holders.

2. For each crontab file found, determine the next time in the future that
   each command is to be run.

3. Place those commands on the Franta-Maly event list with their corresponding
   time and their "five field" time specifier.

4. Enter main loop:

   1. Examine the task entry at the head of the queue, compute how far in 
      the future it is to be run.

   2. Sleep for that period of time.

   3. On awakening and after verifying the correct time, execute the task 
      at the head of the queue (in background) with the privileges of the 
      user who created it.

   4. Determine the next time in the future to run this command and place 
      it back on the event list at that time

Tanya Jawab tentang Pengguna Super ini berjudul: Bagaimana cara kerja cron? mencakup beberapa pertanyaan tambahan Anda. Misalnya pertanyaan Anda tentang bagaimana cron menangani pekerjaan yang dijadwalkan untuk waktu yang sama. Salah satu jawaban di utas itu menyatakan bahwa ketika cron daemon memproses setiap tugas, itu bercabang setiap pekerjaan yang dijadwalkan sehingga tidak ada pekerjaan tunggal yang akan bertindak sebagai pemblokir untuk pekerjaan yang memiliki waktu yang tumpang tindih.

slm
sumber
Jika itu adalah antrian maka tugas dijalankan satu demi satu (yang ada dalam antrian yang sama). Jadi, jika tugas membutuhkan 3 menit untuk dieksekusi dan tugas berikutnya dalam antrian diharapkan dijadwalkan pada menit berikutnya, bagaimana ini terjadi?
Jim
@ Jim - Saya pikir satu penyederhanaan yang Anda asumsikan adalah bahwa itu membaca file setiap menit ketika itu tidak melakukan ini sama sekali. Ketika Anda menyimpan file, daemon crond menggabungkan konten crontab untuk pengguna yang diberikan kemudian dan menambahkannya ke antrian dalam urutan diurutkan berdasarkan waktu di masa depan yang seharusnya dijalankan.
slm
Ok. Jadi dalam hal ini, antrian dapat memiliki tugas yang harus dijalankan secara bersamaan. Jadi proses anak-anak bercabang dua atau lebih?
Jim
@ Jim - tepatnya. Lihat juga komentar tambahan saya di jawabannya.
slm
Bagaimana cara mendeteksi tugas baru yang kami buat untuk cron? Apakah ia menggunakan sesuatu seperti inotify untuk menonton filesystem atau sesuatu yang lain?
CMCDragonkai