Terima kasih sshfs
sulap, saya bisa memasang dir rumah saya dari server jarak jauh dengan
sshfs user@server:/home/user ~/remote
Optimis, saya pikir saya akan menetapkan lokal inotify
-hook di ~/remote/logFile
(dalam sshfs
me-mount) sehingga program lokal dapat bereaksi terhadap perubahan log terpencil.
cd ~/remote
touch logFile # create remote file
inotifywait logFile & # set up local inotify-hook
ssh user@server -x touch /home/user/logFile # touch file from remote
Tidak ada yang terjadi . inotifywait
diam kecuali saya touch
file secara lokal. Menulis ke pipa bernama juga gagal.
Kenapa ini?
Bagaimana saya bisa menjembatani kesenjangan ini?
Saya bisa menjalankannya inotifywait
di remote, meretas sistem perubahan strategi serialisasi file dan menjaga koneksi ke lokal, tapi kemudian saya pada dasarnya mengimplementasikan ulang SSHFS . Dan itu benar-benar membunuh abstraksi.
inotify
pada sistem lokal dapat mendeteksi perubahan pada sistem file jarak jauh. Kernel lokal berada di luar loop dalam perubahan tersebut. Anda harus berjalaninotifywait
di server, bukan klien.Jawaban:
Sistem file SSHFS dibangun di atas protokol SFTP . SFTP hanya menyediakan fasilitas untuk memanipulasi file dengan cara "klasik"; klien membuat permintaan ke server (daftar direktori, unggah file, dll.), dan server merespons. Tidak ada fasilitas dalam protokol ini untuk server secara spontan memberi tahu klien bahwa sesuatu telah terjadi.
Hal ini membuat tidak mungkin untuk menyediakan fasilitas seperti inotify di dalam SSHFS. Dimungkinkan untuk memperluas SSHFS dengan ekstensi milik, atau untuk menambahnya dengan koneksi SSH penuh; tapi saya tidak tahu ekstensi seperti itu ke SSHFS.
Pipa bernama tidak dapat diimplementasikan di atas SSHFS karena alasan yang sama. NFS, sistem file jaringan klasik, juga tidak memiliki fasilitas untuk mendukung mesin lintas bernama pipa. Pada sistem file jaringan, pipa bernama menciptakan titik komunikasi independen pada setiap mesin di mana ia dipasang (di samping server).
FAM (analog inotify dalam SGI IRIX, yang telah porting ke Linux) menyediakan daemon yang memungkinkan pemberitahuan untuk dikirim melalui jaringan. Linux agak ketinggalan FAM sejak inotify datang ke tempat kejadian, jadi saya tidak tahu apakah menjalankan FAM akan lebih mudah daripada menggulirkan sistem notifikasi khusus aplikasi Anda sendiri. Anda perlu mengatur port forwarding melalui SSH atau membuat VPN untuk mengamankan tautan jaringan untuk FAM dan NFS.
Jika Anda memilih untuk memutar sendiri, dengan asumsi bahwa Anda boleh memberikan akses shell klien, cukup mudah untuk menjalankan monitor yang tidak sah atas nama klien: minta klien membuka koneksi SSH, dan jalankan
inotifywait
perintah di server , parsing outputnya pada klien. Anda dapat mengatur koneksi master untuk membuatnya lebih cepat untuk membuka banyak koneksi dari klien yang sama ke server yang sama.sumber