Tugas: menjalankan blok yang terdiri dari 3-5 perintah (secara paralel / latar belakang). Blok contoh:
dd if=/dev/urandom of=/mnt/1/x bs=1024 count=1024000000 &
dd if=/dev/urandom of=/mnt/2/x bs=1024 count=1024000000 &
dd if=/dev/urandom of=/mnt/3/x bs=1024 count=1024000000 &
Setelah selesai, blok selanjutnya harus dijalankan. Saya kira, ini bisa dilakukan melalui file kunci:
task1.sh:
real_task1 real_param1 ; rm /var/lock/myscript/task1.lock
task2.sh:
real_task2 real_param1 ; rm /var/lock/myscript/task2.lock
...
taskgen.sh:
# loop
# while directory isn't empty - wait...
gen_tasks.pl # build task files from some queue
for i in 1 2 3; do touch /var/lock/myscript/task$i.lock ; done
./task1.sh &
./task2.sh &
./task3.sh &
# if task1.sh doesn't exits then exit, else loop waits for files to be deleted
Sejumlah metode untuk memeriksa apakah direktori kosong dapat ditemukan di sini , jangan yakin mana yang akan digunakan;
Pertanyaan : ada cara yang lebih baik untuk mengimplementasikan ini?
PS Metode pelaporan status yang memungkinkan:
command && report_good_state.sh taskid ; report_state_done.sh taskid; rm /var/lock/myscript/taskN.lock
Jawaban:
Ini adalah persis apa gnu parallel dirancang untuk, jadi saya sangat menyarankan Anda menggunakannya. Secara khusus, lihat menjalankannya sebagai semaphore :
sumber
Mungkin beberapa variasi dalam hal ini?
sumber
Apakah Anda punya alasan khusus untuk tidak menggunakan sesuatu seperti GNU parallel ? Jika Anda harus menggunakan bash, maka pertimbangkan metode seperti yang dijelaskan dalam posting blog ini (tunggu dan beri nama pipa sangat membantu di sini).
sumber
"tunggu" menunggu semua pekerjaan latar belakang selesai. Sampel:
tidur 30 & tidur 40 & tidur 120 & tunggu
Itu menunggu sampai semua perintah selesai, yaitu setidaknya 120 detik untuk contoh ini.
Semoga ini membantu.
sumber
Kami mencoba menggunakan utilitas sem GNU , seperti yang dijelaskan oleh Phil Hollenback di atas, tetapi ternyata terlalu berat (300+ contoh melumpuhkan mesin). Saya mencari-cari alat serupa untuk menerapkan semaphore penghitungan ringan tetapi tidak dapat menemukan sesuatu yang cocok.
Jadi saya menerapkannya sendiri menggunakan kawanan, itu disebut semaphoric .
sumber