FSMonitor provides four different ways to display the changes that occurred. You can choose between the view modes with the following control in the toolbar: To switch to another view, click on the segment that corresponds to the view you want to switch to. FSMonitor 1.0.5 MAC OS X Monitor changes to the file system. Size: 10.12 MB FSMonitor monitors all changes in the file system. Track all changes to the file system, including file creation, deletion, change of content, renames, and change-of-attributes. Examine the changed files with any of the four provided display modes.
The unison-fsmonitor tool can watch a directory for file changes, and trigger Unison to do it’s sync-thang automatically without the need to call it manually.
Latest version Released:
Filesystem events monitoring
Project description
Python API and shell utilities to monitor file system events.
Works on Python 2.7 and 3.4+. If you want to use an old version of Python, you should stick with watchdog < 0.10.0.
Example API Usage
A simple program that uses watchdog to monitor directories specifiedas command-line arguments and logs events generated:
Shell Utilities
Watchdog comes with an optional utility script called watchmedo.Please type watchmedo --help Omnigraffle 6 1 3 download free. at the shell prompt toknow more about this tool.
Here is how you can log the current directory recursivelyfor events related only to *.py and *.txt files whileignoring all directory events:
You can use the shell-command subcommand to execute shell commands inresponse to events:
Please see the help information for these commands by typing:
About watchmedo Tricks
watchmedo can read tricks.yaml files and execute tricks within them inresponse to file system events. Tricks are actually event handlers thatsubclass watchdog.tricks.Trick and are written by plugin authors. Trickclasses are augmented with a few additional features that regular event handlersdon’t need.
An example tricks.yaml file:
The directory containing the tricks.yaml file will be monitored. Each trickclass is initialized with its corresponding keys in the tricks.yaml file asarguments and events are fed to an instance of this class as they arrive.
Tricks will be included in the 0.5.0 release. I need community input about them.Please file enhancement requests at the issue tracker.
Installation
Install from PyPI using pip:
Install from source:
Installation Caveats
The watchmedo script depends on PyYAML which links with LibYAML,which brings a performance boost to the PyYAML parser. However, installingLibYAML is optional but recommended. On Mac OS X, you can use homebrewto install LibYAML:
On Linux, use your favorite package manager to install LibYAML. Here’s how youdo it on Ubuntu:
On Windows, please install PyYAML using the binaries they provide.
Documentation
You can browse the latest release documentation online.
Contribute
Fork the repository on GitHub and send a pull request, or file an issueticket at the issue tracker. For general help and questions use the officialmailing list or ask on stackoverflow with tag python-watchdog.
Create and activate your virtual environment, then:
If you are making a substantial change, add an entry to the “Unreleased” sectionof the changelog.
Supported Platforms
- Linux 2.6 (inotify)
- Mac OS X (FSEvents, kqueue)
- FreeBSD/BSD (kqueue)
- Windows (ReadDirectoryChangesW with I/O completion ports;ReadDirectoryChangesW worker threads)
- OS-independent (polling the disk for directory snapshots and comparing themperiodically; slow and not recommended)
Note that when using watchdog with kqueue, you need thenumber of file descriptors allowed to be opened by programsrunning on your system to be increased to more than thenumber of files that you will be monitoring. The easiest wayto do that is to edit your ~/.profile file and adda line similar to:
This is an inherent problem with kqueue because it usesfile descriptors to monitor files. That plus the enormousamount of bookkeeping that watchdog needs to do in orderto monitor file descriptors just makes this a painful wayto monitor files and directories. In essence, kqueue isnot a very scalable way to monitor a deeply nesteddirectory of files and directories with a large number offiles.
About using watchdog with editors like Vim
Vim does not modify files unless directed to do so.It creates backup files and then swaps them in to replacethe files you are editing on the disk. This means thatif you use Vim to edit your files, the on-modified eventsfor those files will not be triggered by watchdog.You may need to configure Vim appropriately to disablethis feature.
About using watchdog with CIFS
When you want to watch changes in CIFS, you need to explicitly tell watchdog touse PollingObserver, that is, instead of letting watchdog decide anappropriate observer like in the example above, do:
Dependencies
- Python 2.7, 3.4 or above.
- XCode (only on Mac OS X)
- PyYAML (only for watchmedo script)
- argh (only for watchmedo script)
Licensing
Watchdog is licensed under the terms of the Apache License, version 2.0.
Copyright 2011 Yesudeep Mangalapilly.
Copyright 2012 Google, Inc.
Project source code is available at Github. Please report bugs and fileenhancement requests at the issue tracker.
Why Watchdog?
Too many people tried to do the same thing and none did what I needed Pythonto do:
Changelog
0.10.3
2020-0x-xx • full history
- Ensure ObservedWatch.path is a string (#651)
- [inotify] Allow to monitor single file (#655)
- [inotify] Prevent raising an exception when a file in a monitored folder has no permissions (#669, #670)
- Thanks to our beloved contributors: @brant-ruan, @rec, @andfoy, @BoboTiG
0.10.2
2020-02-08 • full history
- Fixed the build_ext command on macOS Catalina (#628)
- Fixed the installation of macOS requirements on non-macOS OSes (#635)
- Refactored dispatch() method of FileSystemEventHandler,PatternMatchingEventHandler and RegexMatchingEventHandler
- [bsd] Improved tests support on non Windows/Linux platforms (#633, #639)
- [bsd] Added FreeBSD CI support (#532)
- [bsd] Restored full support (#638, #641)
- Thanks to our beloved contributors: @BoboTiG, @evilham, @danilobellini
0.10.1
2020-01-30 • full history
- Fixed Python 2.7 to 3.6 installation when the OS locale is set to POSIX (#615)
- Fixed the build_ext command on macOS (#618, #620)
- Moved requirements to setup.cfg (#617)
- [mac] Removed old C code for Python 2.5 in the fsevents C implementation
- [snapshot] Added EmptyDirectorySnapshot (#613)
- Thanks to our beloved contributors: @Ajordat, @tehkirill, @BoboTiG
0.10.0
2020-01-26 • full history
Breaking Changes
- Dropped support for Python 2.6, 3.2 and 3.3
- Emitters that failed to start are now removed
- [snapshot] Removed the deprecated walker_callback argument,use stat instead
- [watchmedo] The utility is no more installed by default but via the extrawatchdog[watchmedo]
Other Changes
- Fixed several Python 3 warnings
- Identify synthesized events with is_synthetic attribute (#369)
- Use os.scandir() to improve memory usage (#503)
- [bsd] Fixed flavors of FreeBSD detection (#529)
- [bsd] Skip unprocessable socket files (#509)
- [inotify] Fixed events containing non-ASCII characters (#516)
- [inotify] Fixed the way OSError are re-raised (#377)
- [inotify] Fixed wrong source path after renaming a top level folder (#515)
- [inotify] Removed delay from non-move events (#477)
- [mac] Fixed a bug when calling FSEventsEmitter.stop() twice (#466)
- [mac] Support for unscheduling deleted watch (#541)
- [mac] Fixed missing field initializers and unused parameters inwatchdog_fsevents.c
- [snapshot] Don’t walk directories without read permissions (#408)
- [snapshot] Fixed a race condition crash when a directory is swapped for a file (#513)
- [snasphot] Fixed an AttributeError about forgotten path_for_inode attr (#436)
- [snasphot] Added the ignore_device=False parameter to the ctor (597)
- [watchmedo] Fixed the path separator used (#478)
- [watchmedo] Fixed the use of yaml.load() for yaml.safe_load() (#453)
- [watchmedo] Handle all available signals (#549)
- [watchmedo] Added the --debug-force-polling argument (#404)
- [windows] Fixed issues when the observed directory is deleted (#570 and #601)
- [windows] WindowsApiEmitter made easier to subclass (#344)
- [windows] Use separate ctypes DLL instances
- [windows] Generate sub created events only if recursive=True (#454)
- Thanks to our beloved contributors: @BoboTiG, @LKleinNux, @rrzaripov,@wildmichael, @TauPan, @segevfiner, @petrblahos, @QuantumEnergyE,@jeffwidman, @kapsh, @nickoala, @petrblahos, @julianolf, @tonybaloney,@mbakiev, @pR0Ps, javaguirre, @skurfer, @exarkun, @joshuaskelly,@danilobellini, @Ajordat
0.9.0
2018-08-28 • full history
- Deleting the observed directory now emits a DirDeletedEvent event
- [bsd] Improved the platform detection (#378)
- [inotify] Fixed a crash when the root directory being watched by was deleted (#374)
- [inotify] Handle systems providing uClibc
- [linux] Fixed a possible DirDeletedEvent duplication whendeleting a directory
- [mac] Fixed unicode path handling fsevents2.py (#298)
- [watchmedo] Added the --debug-force-polling argument (#336)
- [windows] Fixed the FILE_LIST_DIRECTORY constant (#376)
- Thanks to our beloved contributors: @vulpeszerda, @hpk42, @tamland, @senden9,@gorakhargosh, @nolsto, @mafrosis, @DonyorM, @anthrotype, @danilobellini,@pierregr, @ShinNoNoir, @adrpar, @gforcada, @pR0Ps, @yegorich, @dhke
0.8.3
2015-02-11 • full history
- Fixed the use of the root logger (#274)
- [inotify] Refactored libc loading and improved error handling ininotify_c.py
- [inotify] Fixed a possible unbound local error in inotify_c.py
- Thanks to our beloved contributors: @mmorearty, @tamland, @tony,@gorakhargosh
0.8.2
2014-10-29 • full history
- Event emitters are no longer started on schedule if Observer is notalready running
- [mac] Fixed usued arguments to pass clang compilation (#265)
- [snapshot] Fixed a possible race condition crash on directory deletion (#281)
- [windows] Fixed an error when watching the same folder again (#270)
- Thanks to our beloved contributors: @tamland, @apetrone, @Falldog,@theospears
0.8.1
2014-07-28 • full history
- Fixed anon_inode descriptors leakage (#249)
- [inotify] Fixed thread stop dead lock (#250)
- Thanks to our beloved contributors: @Witos, @adiroiban, @tamland
0.8.0
2014-07-02 • full history
- Fixed argh deprecation warnings (#242)
- [snapshot] Methods returning internal stats info were replaced bymtime(), inode() and path() methods
- [snapshot] Deprecated the walker_callback argument
- [watchmedo] Fixed auto-restart to terminate all children processes (#225)
- [watchmedo] Added the --no-parallel argument (#227)
- [windows] Fixed the value of INVALID_HANDLE_VALUE (#123)
- [windows] Fixed octal usages to work with Python 3 as well (#223)
- Thanks to our beloved contributors: @tamland, @Ormod, @berdario, @cro,@BernieSumption, @pypingou, @gotcha, @tommorris, @frewsxcv
Release historyRelease notifications | RSS feed
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.1
0.6.0
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.3.6
0.3.4
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size watchdog-0.10.3.tar.gz (94.1 kB) | File type Source | Python version None | Upload date | Hashes |
Hashes for watchdog-0.10.3.tar.gz
Algorithm | Hash digest |
---|---|
SHA256 | 4214e1379d128b0588021880ccaf40317ee156d4603ac388b9adcf29165e0c04 |
MD5 | 9a5c9134e943b534b9f8b51d78338cf8 |
BLAKE2-256 | 0e06121302598a4fc01aca942d937f4a2c33430b7181137b35758913a8db10ad |
What was supposed to be a quick-and-dirty on 2-way file synchronisation for Debian servers using Unison.
![Movies Movies](https://guardiumnotes.files.wordpress.com/2015/10/123.png)
Pros | Cons |
---|---|
2-way synchronisation | May need to build it from source code |
Exists in Debian repositories | Not under ‘active’ development |
Runs under Unix/Windows/OSX | More than 2 nodes Star topology recommended (ie, single point of failure) |
Homepage:https://www.cis.upenn.edu/~bcpierce/unison/
GitHub:https://github.com/bcpierce00/unison
Manual:https://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html
GitHub:https://github.com/bcpierce00/unison
Manual:https://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html
See Also:https://medium.com/@yobi.kim/how-to-install-unison-91c9fb36ac09
Installation
From Debian Repos
Assuming a Debian server, we can install Unison using apt-get.
Currently (2018/09/03) this will install the following version of Unison, depending on the version of Debian you’re running:
Fsmonitor 1 123 Drive
- 8 Jessie: v2.40.102
- 9 Stretch: v2.48.3
From source
If a later release than that published in the Debian repositories is required, we can build it from source.Grab the latest release source code from https://github.com/bcpierce00/unison/releases
Make sure we have the required OCaml compiler stuff
Then build it (replacing 2.51.2 with whatever is the latest release)
Hmm…
Looks like neither of the above installation methods provide us with the unison-fsmonitor tool, which would allow us to run Unison kinda as a daemon/service with some tweaks.The unison-fsmonitor tool can watch a directory for file changes, and trigger Unison to do it’s sync-thang automatically without the need to call it manually.
Testing it out locally
It’s possible to synchronise 2 directories on the same machine, so in the name of KISS, let’s try that out first.In this experiment we’ll try to keep the following two directories ‘in sync’:
Running Unison Manually
Configuration
In our Unison ‘profile’, let’s try the following so it knows ‘sup/home/jarrod/.unison/local.prf
Push the big red button
Apparently running Unison should be as simple as calling unison with the name of our profile (in this case ‘local’).
Well, that’s interesting.
Makes sense. Let’s create some test files and run it
FUCKING YES! ?
Remove some files, and…
Ok. So it basically does what I want, but only when I tell it to.How can we automate this process?
Fsmonitor 1 123 Movie
Watch directories and sync automatically with Unison
Building on our above Unison profile, let’s use the following
/home/jarrod/.unison/local.prf
Now, when we run Unison with our ‘local’ profile, it’ll keep running and watch the ' root’ directories for changes.
This is great!
Where it all comes crashing down ?
The maximum number of files that can be ‘watched’ for changes by in Linux using inotify (which I can only assume unison-fsmonitor is doing) is defined by the fs.inotify.max_user_watches system variable. By default (in Debian land, at least) this number is 8192.
Ok, so usually we are able to change these values - that’s the whole point of having configuration options, right?
Permission fucking what?
It’s interesting to note that I’ve tried this on another “VPS” that runs under OpenVZ on my own hardware,and it appears to be a limitation of this type of virtualisation, not necessarily something that has been overridden/forbidden by a host.
Fsmonitor 1 123movies
Trying the same command on a KVM virtual machine is a whole ‘nother story.
Works like a bought one! ?
To make the change to fs.inotify.max_user_watches permenant, ie not lost between reboots, you can add it to /etc/sysctl.conf.
TL;DR
So, this could be a viable option ifA) You run your own hardwareB) You aren’t running on some VM under OpenVZ
Unfortunately that’s not the situation I’m in right now ?