Sepertinya Anda perlu menggunakan flock seperti pada contoh dari man (http://linux.die.net/man/1/flock)
(
flock -x 200
# Put here your commands that must do some writes atomically
) 200>/var/lock/mylockfile
Dan letakkan semua perintah Anda yang harus atomik di ().
flock adalah salah satu cara operasi interlocking. Utilitas adalah bagian dari perangkat util-linux dan hanya tersedia untuk Linux. Utilitas lain, tersedia di berbagai platform yang lebih luas, didasarkan pada setlock Daniel J. Bernstein utilitas dari paket daemontools-nya:
setlockdari daemontoolssetlockdari daemontools-encore
milik Bruce Guenter s6-setlockdari s6 Laurent Bercotchpstdari runit Gerrit Paperunlockdari pelaku Wayne Marshallsetlockdari perangkat nosh saya
Alat-alat ini beroperasi dengan paradigma yang sedikit berbeda dengan yang digunakan dalam jawaban M. Kurenkov (yang flock juga dapat mempekerjakan, tetapi tidak dalam jawaban itu). Seseorang memanggil setlock program untuk memuat rantai untuk perintah yang harus saling bertautan. setlock itu sendiri membuka dan mengunci file kunci, dan membiarkan deskriptor file terbuka dalam prosesnya. Kunci tetap ada selama proses itu berlangsung (kecuali jika perintah selanjutnya dirangkai untuk melepaskan kunci secara eksplisit dengan menemukan dan menutup deskriptor file yang terbuka).
Untuk kasus dalam pertanyaan, seseorang harus mengunci perintah yang menghasilkan baris keluaran, dengan menyadari bahwa ini memanggil perintah eksternal echo sebagai pengganti echo bawaan shell perintah:
setlock mylockfile echo "$RESULT" >> ./$TEMP_DIR/$OUT_FILE
Dalam hal ini tidak perlu interlock membuka file output dalam mode append. Jika ya, seseorang harus membuka file itu di dalam kunci, yang mengharuskan menggunakan program seperti fdredir /redirfd :
setlock mylockfile fdredir --append 1 "./$TEMP_DIR/$OUT_FILE" echo "$RESULT"mana yang bisa diubah menjadi fungsi shell jika diinginkan:
outfile() { setlock mylockfile fdredir --append 1 "./$TEMP_DIR/$OUT_FILE" "example@unixlinux.online" ; }
[…]
outfile echo "$RESULT" atau tetap menggunakan sintaks shell dan menafsirkannya dengan shell kedua yang berjalan di bawah interlock, memerlukan beberapa kutipan non-sepele jika variabel shell seseorang tidak diekspor sebagai variabel lingkungan:
setlock mylockfile sh -c 'echo '"$RESULT"' >> "./'$TEMP_DIR'/'$OUT_FILE'"'
Ini tentu saja menggeneralisasikan hal-hal selain menulis ke file keluaran:
setlock mylockfile sh -c '… interlocked ; stuff …'