File watcher intended for use with Syncthing (Linux, BSD, Windows, OSX)
  • Go 96.7%
  • Ruby 3.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2015-11-21 20:34:45 +01:00
etc Launch daemon file for Mac OS X 2015-10-13 20:57:18 +03:00
.gitignore Moved syncthing-inotify systemd service to etc/linux-systemd 2015-03-10 08:10:06 +01:00
cross-compile.rb Make sure the release build does not contain further changes 2015-08-03 08:37:52 +02:00
LICENSE Added MPLv2 LICENSE 2015-03-09 19:08:38 +01:00
README.md Fix README 2015-07-21 12:52:41 +02:00
syncwatcher.go Overrule 0.0.0.0 address from config.xml with 127.0.0.1 (fixes #82) 2015-11-21 20:34:45 +01:00
syncwatcher_test.go Fixes bug when aggregating delete events that have overlapping filename 2015-07-31 23:55:05 +02:00
syncwatcher_unix_test.go Ignore events originating from Syncthing. 2015-02-28 12:24:35 +01:00
syncwatcher_windows_test.go Ignore events originating from Syncthing. 2015-02-28 12:24:35 +01:00

What is this?

Syncthing (core) uses a rescan interval to detect changes in folders. This application (syncthing-inotify) uses OS primitives to detect changes as soon as they happen. Therefore, if you save a file, syncthing-inotify will know about it and pass this information to Syncthing such that near real-time synchronisation can be achieved.

Where do I get it?

Syncthing-inotify binaries are released on github

How do I run it?

Syncthing-inotify will automatically read the Syncthing config if it is found in the standard path.

  • Run and hide on unix in a screen
screen -S inotify -dm ./syncthing-inotify
  • Run and hide on windows in .vbs script
CreateObject("Wscript.Shell").Run "syncthing-inotify.exe, 0, True
  • Run and hide on windows using API key in .vbs script
CreateObject("Wscript.Shell").Run "syncthing-inotify.exe -api=""...""", 0, True
  • Install as a service, see the etc/ folder

I'm confused

  • Try Syncthing-GTK
  • Read the commandline options: ./syncthing-inotify -help. Settings, such as an API key, need to be manually provided if you use a custom home for Syncthing.

Building syncthing-inotify

# To clone
mkdir -p src/github.com/syncthing
git clone https://github.com/syncthing/syncthing-inotify.git src/github.com/syncthing/syncthing-inotify
# Following commands are needed every time you want to build (unless you use Golang's specific folder structure: C:\src  or ~/src/)
export GOPATH=$(pwd)
cd src/github.com/syncthing/syncthing-inotify
go get
go build
# To tag the build with a version number, use
go build -ldflags "-w -X main.Version `git describe --abbrev=0 --tags`"
# See cross-compile.rb for further compilation details
# - Please prefix the build with GO386=387 when building for i386
# - Please prefix the build with GOARM=5 when building for arm
# - Depends on darwin_amd64/notify.a for OSX builds

Troubleshooting for folders with many files on Linux

  • Linux limits the amount of inotify watchers (typically to 8192). Therefore, if you wish to sync many files and folders, you'll need to increase the upper limit:

    Permanently fix Too many open files for Linux: sudo sh -c 'echo fs.inotify.max_user_watches=204800\n >> /etc/sysctl.conf'

    Fix Too many open files for Linux until next reboot: sudo sh -c 'echo 204800 > /proc/sys/fs/inotify/max_user_watches' (should be applied before launching syncthing-inotify)