Saya mencari solusi sederhana dan generik yang memungkinkan Anda untuk mengeksekusi skrip atau aplikasi apa pun di crontab dan mencegahnya berjalan dua kali.
Solusinya harus independen pada perintah yang dijalankan.
Saya menganggap itu akan terlihat seperti di lock && (command ; unlock)
mana kunci akan kembali palsu jika ada kunci lain.
Bagian kedua akan seperti jika memperoleh kunci, menjalankan perintah dan membuka kunci setelah perintah dijalankan, bahkan jika itu mengembalikan kesalahan.
echo "Locking succeeded" >&2; trap 'rm -rf /var/lock/mylock' EXIT
Tidak perlu menginstal beberapa paket mewah:
Lebih cepat menulis skrip itu sendiri daripada menjalankan "apt-get install", bukan? Anda mungkin ingin menambahkan "-u $ (id -u)" ke pgrep untuk memeriksa instance yang dijalankan oleh pengguna saat ini saja.
sumber
||
operator pada saat yang sama, sebelum keduanya memiliki kesempatan untuk memulai skrip.Lihat juga Tim Kay's
solo
, yang melakukan penguncian dengan mengikat port pada alamat loopback yang unik bagi pengguna:http://timkay.com/solo/
Jika situsnya turun:
Pemakaian:
Gunakan seperti ini:
Naskah:
sumber
solo(3801): Can't assign requested address
kecuali Anda memaksa a0
untuk parameter metode ke-3pack
. Apa yang baik untuk BSD juga bagus untuk Mac.Anda butuh kunci.
run-one
melakukan pekerjaan, tetapi Anda mungkin juga ingin melihatflock
dariutil-linux
paket.Ini adalah paket standar yang disediakan oleh pengembang kernel, memungkinkan lebih banyak penyesuaian daripada
run-one
dan masih sangat sederhana.sumber
Solusi sederhana dari bash-hackers.org yang bekerja untuk saya adalah menggunakan mkdir . Ini adalah cara mudah untuk memastikan bahwa hanya satu instance dari program Anda yang berjalan. Buat direktori dengan mkdir .lock yang mengembalikan
Jadi fungsi sederhana ini melakukan semua logika penguncian file:
sumber
Solusi ini adalah untuk skrip bash yang perlu memeriksa sendiri
sumber