fondere l'azione su umount
Domanda
Ho scritto alcuni semplici filesystem con Python-fuse, ma ora voglio fare qualcosa che non riesco a trovare nel pydoc né negli script di esempio che ho trovato: quando il filesystem è smontato con fusermount -u
, Voglio intercettare quell'azione, eseguire l'umount e quindi rmdir la directory di montaggio creata dallo script di inizializzazione del mio programma.Se è anche possibile, qual è l'incantesimo magico per intrappolare l'azione umount?
Posso vedere come questo possa facilmente trasformarsi in un ciclo infinito, ma spero di riuscire a capire come disabilitare l'umount trap la prima volta che viene colpito.
Aggiornamento: ho trovato
destroy
su http://omake.metaprl.org/prerelease/omake-dll-fuse.html#htoc582 e ha aggiunto il metodo, ma non sembra essere chiamato.
Soluzione
trovato!è fsdestroy () in Python-fuse.individuato da:
jcomeau@intrepid:/usr/src/google-desktop/api$ cat /usr/lib/python2.6/dist-packages/fuseparts/* | strings | grep destroy fsdestroy
Quello che ho usato era:
def fsdestroy(self, data = None): syslog.syslog(syslog.LOG_INFO, 'destroy %s: %s' % (self.mountpoint, data)) os.rmdir(self.mountpoint)
Non so se il parametro data è necessario o meno, ma non fa male.E a quanto pare, si chiama dopo l'umount, quindi non dovevo preoccuparmi di gestirlo.
Altri suggerimenti
Un'altra soluzione, sebbene non specifica e non testata in Python, è impedire a FUSE di "demonizzare" con l'opzione -f
.
In questo caso, il metodo fuse_main
si bloccherà fino a quando il filesystem non verrà smontato e in seguito riavrai il controllo.
Se hai bisogno del comportamento del demone, puoi reimplementarlo da solo prima di montare.