pekerjaan cron dengan waktu eksekusi yang sama

8

Misalkan saya memiliki beberapa pekerjaan cron yang diatur untuk dijalankan pada saat yang sama: apakah mereka menjalankannya secara paralel atau hanya satu demi satu?

(Kasus saya adalah pemerasan Debian dengan cronjobs dimasukkan ke dalam /etc/cron.d/mycronjobs).

Gabriele
sumber

Jawaban:

7

Untuk kelengkapan, pekerjaan di mis /etc/cron.{hourly ,daily ,weekly ,monthly} dijalankan secara berurutan. Script run-parts loop semua file dalam direktori ini.

02 4 * * * root run-parts /etc/cron.daily

Jadi, Anda dapat menggunakannya dalam kombinasi dengan konvensi penamaan (mirip dengan penomoran /etc/init.d/rc*.dmisalnya) untuk memastikan pekerjaan berjalan berurutan.

Bram
sumber
Bagaimana jika saya memiliki beberapa pekerjaan cron dalam file yang sama, diatur untuk dijalankan pada waktu yang sama?
Gabriele
Saya tidak yakin apa yang Anda maksud dengan "di dalam file yang sama". Tetapi jika Anda bermaksud bahwa Anda memiliki beberapa baris dengan spesifikasi waktu yang sama (seperti yang 0 * * * *Anda posting sebelumnya) maka seperti yang lain telah diposting tidak ada jaminan pada urutan mereka akan berjalan. Mereka dapat berjalan secara paralel pada sistem multi-core, AFAIK urutan menjalankan mereka bahkan mungkin berbeda setiap hari. Konvensi penamaan yang saya sebutkan bersama dengan run-parts atau penggunaan skrip master yang memanggil skrip cadangan aktual adalah satu-satunya cara untuk memastikan skrip dieksekusi dalam urutan tertentu.
Bram
Baiklah kalau begitu, karena saya perlu memastikan skrip saya akan berjalan satu demi satu, saya pikir saya akan mencari "master script" yang dipicu oleh pekerjaan cron, dan memanggil skrip apa pun dari dalam skrip utama.
Gabriele
5

Tugas-tugas yang tercantum dalam cron akan berjalan secara paralel, sama seperti proses biasanya. Tidak ada cara untuk memastikan mana yang akan mulai lebih dulu, dan tidak ada cara dalam cron untuk memastikan tugas A telah selesai sebelum tugas B dimulai.

Sirch
sumber
1
Anda dapat memastikan tugas A telah selesai sebelum tugas B dimulai dengan mendaftarkannya pada baris yang sama dan memisahkannya dengan tanda titik koma.
Nicholas
Itu tidak berarti tugas A telah selesai dengan sukses. Mungkin Anda bisa menggunakan &&, tetapi hal seperti ini harus dilakukan oleh skrip yang dipanggil.
Sirch
Anda dapat menggunakan operan apa pun yang didukung bash shell. Menggunakan &&, ||, atau; in cron adalah praktik umum dalam pengalaman saya.
Nicholas
2

Cron adalah daemon (layanan) yang berjalan terus menerus; namun, ia membaca crontab satu menit sekali.

Urutan yang tepat di mana pekerjaan dieksekusi akan tergantung pada implementasi kondisi sistem Anda.

File-file longgar yang dimasukkan oleh beberapa distribusi ke dalam /etc/cron.d/ dipindai untuk pengaturan timer cronnya, karena file-file ini mengikuti sintaks crontab normal (5).

Urutan apa pekerjaan individu dieksekusi tergantung pada jadwal yang Anda tetapkan untuk mereka, jelas.

adaptr
sumber
Bagaimana jika jadwal diatur seperti ini: ---- 0 * * * * root sh / var / opt / backup_scripts / backup1 - 0 * * * * root sh / var / opt / backup_scripts / backup2 ---- Akankah mereka berjalan secara berurutan, yaitu backup1 dan, ketika selesai, backup2?
Gabriele
Urutan yang tepat di mana pekerjaan dieksekusi akan tergantung pada implementasi kondisi sistem Anda. man cron untuk detailnya.
adapttr
man cron tidak menyatakan apa-apa tentang itu (setidaknya dalam bahasa Debian).
Gabriele
2

Mereka akan berjalan secara paralel. Anda dapat menggunakan metode berikut untuk menjalankan proses secara berurutan.

# Use a semicolon to run command2 after command1 has completed
02 4 * * * /path/to/command1 ; /path/to/command2

# Use two ampersands to run command2 after command1 has completed successfully.
02 4 * * * /path/to/command1 && /path/to/command2

# Use two vertical rules to run command2 after command1 has completed unsuccessfully.
02 4 * * * /path/to/command1 || /path/to/command2
Nicholas
sumber