fswatch
adalah pemantau perubahan file yang menerima pemberitahuan ketika konten file atau direktori tertentu diubah. fswatch
mengimplementasikan beberapa monitor:
stat (2)
dapat digunakan). fswatch
harus membangun dan bekerja dengan benar pada sistem apa pun yang mengirimkan salah satu API yang disebutkan di atas.
fswatch
adalah frontend dari libfswatch
, perpustakaan dengan pengikatan C dan C++. Informasi lebih lanjut tentang libfswatch
dapat ditemukan di sini.
fitur utama fswatch
adalah:
Keterbatasan fswatch
sangat bergantung pada monitor yang digunakan:
Monitor FSEvents , yang hanya tersedia di macOS, tidak memiliki batasan yang diketahui, dan berskala sangat baik sesuai dengan jumlah file yang diamati.
Monitor Pemberitahuan Peristiwa File , yang tersedia pada kernel Solaris dan turunannya, tidak memiliki batasan yang diketahui.
Monitor kqueue , tersedia di sistem *BSD apa pun yang dilengkapi kqueue, memerlukan deskriptor file yang harus dibuka untuk setiap file yang sedang ditonton. Akibatnya, skala monitor ini buruk seiring dengan jumlah file yang diamati, dan mungkin mulai berperilaku buruk segera setelah proses fswatch
kehabisan deskriptor file. Dalam hal ini, fswatch
membuang satu kesalahan pada kesalahan standar untuk setiap file yang tidak dapat dibuka.
Monitor inotify , tersedia di Linux sejak kernel 2.6.13, mungkin mengalami kelebihan antrian jika peristiwa dihasilkan lebih cepat daripada yang dibaca dari antrian. Dalam kasus apa pun, aplikasi dijamin menerima pemberitahuan luapan yang dapat ditangani agar dapat pulih dengan baik. fswatch
saat ini memunculkan pengecualian jika terjadi antrian berlebih. Versi masa depan akan menangani luapan dengan mengeluarkan pemberitahuan yang tepat.
Monitor Windows hanya dapat membuat direktori jam tangan, bukan file. Untuk melihat suatu file, direktori induknya harus diawasi agar dapat menerima peristiwa perubahan untuk semua turunan direktori, secara rekursif pada kedalaman berapa pun. Secara opsional, peristiwa perubahan dapat difilter untuk hanya menyertakan perubahan pada file yang diinginkan.
Monitor jajak pendapat , tersedia di platform apa pun, hanya mengandalkan CPU dan memori yang tersedia untuk menjalankan tugasnya. Performa monitor ini menurun secara linier seiring dengan jumlah file yang ditonton.
Rekomendasi penggunaan adalah sebagai berikut:
Di macOS, hanya gunakan monitor FSEvents
(yang merupakan perilaku default).
Di Solaris dan turunannya gunakan monitor File Events Notice .
Di Linux, gunakan monitor inotify
(yang merupakan perilaku default).
Jika jumlah file yang akan diamati cukup kecil, gunakan monitor kqueue
. Berhati-hatilah karena pada beberapa sistem, jumlah maksimum deskriptor file yang dapat dibuka oleh suatu proses diatur ke nilai yang sangat rendah (nilai serendah 256 tidak jarang terjadi), bahkan jika sistem operasi mengizinkan nilai yang jauh lebih besar. Dalam hal ini, periksa dokumentasi OS Anda untuk menaikkan batas ini baik per proses atau seluruh sistem.
Jika memungkinkan, perhatikan direktori, bukan file. Menyusun sisi penerima peristiwa dengan benar untuk menangani direktori dapat mengurangi konsumsi sumber daya monitor.
Di Windows, gunakan monitor windows
.
Jika tidak satu pun hal di atas berlaku, gunakan monitor jajak pendapat. Pengalaman penulis menunjukkan bahwa fswatch
membutuhkan memori RAM sekitar 150 MB untuk mengamati hierarki 500.000 file dengan panjang jalur minimal 32 karakter. Hambatan umum pada monitor jajak pendapat adalah akses disk, karena stat()
-ing sejumlah besar file mungkin memerlukan banyak waktu. Dalam hal ini, latensi harus disetel ke nilai yang cukup besar untuk mengurangi penurunan kinerja yang mungkin diakibatkan oleh seringnya akses disk.
Pengguna biasa mungkin dapat mengambil fswatch
dari manajer paket OS Anda atau pihak ketiga. Jika Anda mencari fswatch
untuk macOS, Anda dapat menginstalnya menggunakan MacPorts atau Homebrew:
# MacPorts
$ port install fswatch
# Homebrew
$ brew install fswatch
Di FreeBSD, fswatch
dapat diinstal menggunakan pkg:
# pkg install fswatch-mon
Periksa pengelola paket favorit Anda dan beri tahu kami jika fswatch
tidak ada di sana.
Pengguna yang ingin membuat fswatch
harus mendapatkan tarball rilis. Tarball rilis berisi semua yang dibutuhkan pengguna untuk membangun fswatch
di sistem mereka, mengikuti instruksi yang dirinci di bagian Instalasi di bawah dan file INSTALL
.
Pengembang yang ingin memodifikasi fswatch
harus mendapatkan sumbernya (baik dari tarball sumber atau mengkloning repositori) dan menginstal GNU Build System di mesin mereka. Silakan baca README.gnu-build-system
untuk mendapatkan detail lebih lanjut tentang cara mem-bootstrap fswatch
dari sumber di mesin Anda.
Mendapatkan salinan repositori sumber tidak disarankan kecuali Anda seorang pengembang, Anda telah menginstal GNU Build System di mesin Anda, dan Anda tahu cara melakukan bootstrap pada sumbernya.
Lihat file INSTALL
untuk informasi rinci tentang cara mengkonfigurasi dan menginstal fswatch
. Karena fswatch
membangun dan menggunakan pustaka dinamis, di beberapa platform Anda mungkin perlu melakukan tugas tambahan sebelum dapat menggunakan fswatch
:
Pastikan direktori instalasi perpustakaan dinamis ( $PREFIX/lib
) disertakan dalam jalur pencarian tautan dinamis sistem operasi Anda. Jalur default, /usr/local/lib
, akan berfungsi di hampir semua sistem operasi.
Menyegarkan tautan dan cache ke perpustakaan dinamis mungkin diperlukan. Di sistem GNU/Linux Anda mungkin perlu menjalankan ldconfig
:
$ ldconfig
fswatch
adalah program C++ dan kompiler C++ yang sesuai dengan standar C++11 diperlukan untuk mengkompilasinya. Periksa dokumentasi OS Anda untuk informasi tentang cara menginstal rantai alat C++ dan runtime C++.
Tidak ada paket perangkat lunak atau dependensi lain yang diperlukan untuk mengkonfigurasi dan menginstal fswatch
tetapi API yang disebutkan di atas digunakan oleh monitor sistem file.
fswatch
menyediakan dokumentasi berikut:
Dokumentasi resmi fswatch
disediakan dalam format Texinfo. Ini adalah sumber informasi terlengkap tentang fswatch
dan satu-satunya yang otoritatif. Halaman manual, khususnya, adalah rintisan yang menyarankan pengguna untuk menggunakan halaman info.
Jika Anda menginstal fswatch
menggunakan manajer paket dan Anda ingin manual PDF digabungkan ke dalam paket, silakan kirim permintaan fitur ke pengelola paket.
fswatch
dapat dilokalkan dan secara internal menggunakan gettext
GNU untuk memisahkan string yang dapat dilokalkan dari terjemahannya. Lokal yang tersedia saat ini adalah:
en
).it
).es
). Untuk membangun fswatch
dengan dukungan pelokalan, Anda perlu menginstal gettext
di sistem Anda. Jika configure
tidak dapat menemukan
atau tautan tidak dapat menemukan libintl
, Anda mungkin perlu memberikan lokasinya secara manual ke configure
, biasanya menggunakan variabel CPPFLAGS
dan LDFLAGS
. Lihat README.macos
sebagai contoh.
Jika gettext
tidak tersedia di sistem Anda, fswatch
akan dibangun dengan benar, tetapi tidak memiliki dukungan pelokalan dan satu-satunya bahasa yang tersedia adalah bahasa Inggris.
fswatch
menerima daftar jalur dimana peristiwa perubahan harus diterima:
$ fswatch [options] ... path-0 ... path-n
Aliran peristiwa dibuat meskipun jalur mana pun belum ada. Jika dibuat setelah fswatch
diluncurkan, peristiwa perubahan akan diterima dengan benar. Bergantung pada pengamat yang digunakan, jalur yang baru dibuat akan dipantau setelah jumlah latensi yang dikonfigurasi telah berlalu.
Output dari fswatch
dapat disalurkan ke program lain untuk diproses lebih lanjut:
$ fswatch -0 path | while read -d "" event
do
// do something with ${event}
done
Untuk menjalankan perintah ketika serangkaian peristiwa perubahan dicetak ke keluaran standar tetapi tidak diperlukan detail peristiwa, maka perintah berikut dapat digunakan:
$ fswatch -o path | xargs -n1 -I{} program
Perilaku ini konsisten dengan versi fswatch
sebelumnya (v. 0.x). Silakan baca bagian Masalah Kompatibilitas dengan fswatch v. 0.x untuk informasi lebih lanjut.
Secara default, fswatch
memilih monitor terbaik yang tersedia di platform saat ini, dalam hal kinerja dan konsumsi sumber daya. Jika pengguna ingin menentukan monitor yang berbeda, opsi -m
dapat digunakan untuk menentukan monitor berdasarkan nama:
$ fswatch -m kqueue_monitor path
Daftar monitor yang tersedia dapat diperoleh dengan opsi -h
.
Untuk informasi lebih lanjut, lihat dokumentasi fswatch
.
Semua orang dipersilakan untuk berkontribusi pada fswatch
. Silakan lihat CONTRIBUTING
untuk informasi lebih lanjut.
Laporan bug dapat dikirim langsung ke penulisnya.
Penulis dapat dihubungi di IRC, menggunakan saluran Freenode #fswatch
.
Perangkat lunak ini berlisensi ganda di bawah GPL v. 3.0 dan Lisensi Apache v. 2.0.
Hak Cipta (c) 2013-2021 Enrico M. Crisostomo
Program ini adalah perangkat lunak bebas; Anda dapat mendistribusikan ulang dan/atau memodifikasinya berdasarkan ketentuan Lisensi Publik Umum GNU yang diterbitkan oleh Free Software Foundation; baik versi 3, atau (sesuai pilihan Anda) versi yang lebih baru.
Program ini disebarluaskan dengan harapan dapat bermanfaat, namun TANPA JAMINAN APA PUN; bahkan tanpa jaminan tersirat mengenai KELAYAKAN UNTUK DIPERDAGANGKAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat Lisensi Publik Umum GNU untuk lebih jelasnya.
Anda seharusnya sudah menerima salinan Lisensi Publik Umum GNU bersama dengan program ini. Jika tidak, lihat http://www.gnu.org/licenses/.