Apakah penjadwal pekerjaan cron benar-benar tepat?
Maksudku, aku butuh skrip untuk menjalankan setiap malam secepat mungkin, TETAPI sebelum pukul 00:00 hari berikutnya.
Saya idealnya menjalankan pekerjaan cron pada 23.59 (atau 11:59 malam), tetapi apakah sistemnya benar-benar tepat? Karena masalah kedua tidak masalah, haruskah saya mengatur tugas cron ke 23:58 untuk membiarkannya beberapa saat?
Jawaban:
Yang dapat dijamin cron adalah bahwa pekerjaan Anda akan dimulai tidak lebih cepat dari waktu yang ditentukan (tergantung pada ketepatan jam sistem). Tetapi tidak ada cara untuk memberi Anda jaminan tentang waktu pemutusan hubungan kerja. Itu akan tergantung pada banyak faktor:
Rekomendasi saya adalah untuk mengubah desain Anda sehingga waktu penyelesaian tertentu bukan persyaratan.
sumber
O_CREAT
danO_EXCL
menandai itu akan menjadi atom selama file ada pada sistem file lokal.Saya kira ini tergantung pada cron daemon Anda, tetapi dokumentasi dan standar menunjukkan bahwa jika Anda menentukan menit, pekerjaan akan dijalankan pada menit yang ditentukan.
Lihat:
Ketahuilah bahwa skrip Anda akan dimulai ketika jam berdetak ke waktu yang tepat, tetapi akan selesai beberapa saat setelah itu.
sumber
Biasanya cron akan mulai pada 23:59:00 , memindai semua file crontab Anda, menyaring orang-orang yang relevan untuk 23:59 dan kemudian mulai. Memindai file ini sangat cepat, karena jumlahnya tidak banyak dan semuanya hanya berisi beberapa baris. Jadi biasanya, cronjobs mulai pukul 23:59:00 atau 23:59:01 Ada cara pasti untuk memperlambat proses ini. (tambahkan jutaan baris ke crontab, misalnya). Jika sistem benar-benar kelebihan beban, ini juga tidak akan bekerja secepat itu.
Juga, ini jelas tergantung pada implementasi.
Jika Anda membutuhkan waktu mulai yang sangat tepat, Anda lebih baik membuat program yang tidur sampai waktu yang Anda inginkan dan kemudian berjalan (misalnya menggunakan c ++ 11 ). Tetapi pada OS non-waktu nyata, ini juga tidak akan tepat! Juga jam PC tidak tahu waktu yang tepat!
Dalam semua kasus, ini hanya memastikan program dimulai pada (kurang lebih) waktu yang Anda inginkan. Tidak ada jaminan bahwa program berakhir sukses sampai waktu tertentu, jadi saya sangat percaya Anda harus mengubah sesuatu pada persyaratan itu.
sumber
Itu tergantung dari keseluruhan waktu eksekusi skrip Anda dan ketepatan waktu server.
akan meluncurkan skrip Anda tepat pada 23:59, tetapi, jika Anda memiliki beberapa perintah yang bekerja lama, bagian dari skrip dapat dieksekusi setelah tengah malam.
sumber