Watchdog: watchmedo mendeteksi perubahan file tetapi menjalankan perintah dua kali

Dibuat pada 3 Mei 2018  ·  3Komentar  ·  Sumber: gorakhargosh/watchdog

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

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

Semua 3 komentar

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:

  • Menunggu $10 ms$ sebelum memulai pekerjaan yang dipicu
  • Mengabaikan acara baru selama $50 ms$ berikutnya
  • Menghentikan/memulai ulang pekerjaan saat acara baru muncul setelah $50 md$

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat