Hai,
Saya mencoba contoh sederhana ini:
watchmedo shell-command --patterns="*.bin" --command 'copytoserver.bat'
yang bekerja cukup baik : ketika .bin dibuat di direktori saat ini, copytoserver.bat dieksekusi DUA KALI, bukan hanya SEKALI
Apakah ini masalah atau saya melewatkan sesuatu dalam mencari argumen yang baik?
Terimakasih atas bantuannya
Gilles
Memang, itu terjadi.
Di Linux, touch filename
akan memancarkan 2 pesan: pembuatan file dan modifikasi file, jika file tidak ada. Mungkin hal yang sama terjadi di Windows, dan itulah mengapa ini berjalan dua kali, bukan sekali.
Menyimpannya di vim
sini dengan beberapa arbitrer membuatnya berjalan 11 kali. Mungkin itu karena termasuk penghapusan file, pembuatan file sementara dan penggantian nama.
Mungkin akan lebih baik untuk membagi proyek ini menjadi 2: perpustakaan ( watchdog
) dan aplikasi shell ( watchmedo
). Saya tidak mengetahui berapa banyak pengguna yang bergantung pada keduanya, tetapi mungkin pemfilteran acara tidak boleh sama pada keduanya, dan itu mungkin menjadi beban untuk dipertahankan.
Saya telah memperbaiki masalah ini pada dosis dengan menambahkan satu pelari dengan "debouncer" yang:
Sebenarnya, itu sangat cepat yang digunakan untuk merusak pengawas di Linux karena kejadian aneh terjadi pada direktori yang dihapus, jadi saya memperbaikinya di hulu.
Tapi, itu masalah tentang pelari tunggal yang dipicu oleh suatu peristiwa. Ini adalah aplikasi (seperti perintah watchmedo shell-command
). Jika kita ingin memiliki tindakan yang berbeda untuk peristiwa yang berbeda, dengan beberapa di antaranya mungkin berjalan secara paralel, memfilter peristiwa yang kebetulan berdekatan akan menjadi kesalahan. Yang mengatakan, masalahnya bukan di perpustakaan watchdog
, tetapi di watchmedo
.
Saya memiliki masalah yang sama, dan solusi cepat adalah menggunakan flock -n test.lock CMD
untuk memastikan proses hanya dapat berjalan sekali
Komentar yang paling membantu
Saya memiliki masalah yang sama, dan solusi cepat adalah menggunakan
flock -n test.lock CMD
untuk memastikan proses hanya dapat berjalan sekali