diff --git a/README.md b/README.md index a8d838177dfca7d0e5c56459b6bb1f5521c4304d..febe62ead72553a9cd2c7d6c9eb50e49f07258c1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,75 @@ # onfilechange +A Shell script that watches a given file or multiple files. +If one of the watched file changes then a given command will be exxecuted. +It loops permanently; you need to stop it by Ctrl + C and/ or can +use it as systemd watcher daemon. + +It uses stats for wide compatibility but prefers inotifywatch to +check a file change. + +licence: Free software GNU GPL 3.0 + +Source: https://git-repo.iml.unibe.ch/open-source/onfilechange + + +## Installation + +* Copy the bash script somewhere you like. +* set execute permissions `chmod 0755 onfilechange.sh` + +## Usage + +``` +Parameters + -c [command] + command to execute on a file change + -f [filename(s)] + filenames to watch; separate multiple files with space and put all in quotes + -h + show this help + -i + force inotifywait command + -s + force stats command + -v + verbose mode; enable showing debug output + -w [integer] + for stats mode: wait time in seconds betweeen each test or on missing file; default: 5 sec + +``` + +## Test on command line + +To make a test on commandline touch a testfile `touch /tmp/mytestfile`. +The start the script with enabled debugging (-d) in a 2nd terminal: + +`/usr/local/bin/onfilechange.sh -v -f "/tmp/mytestfile" -c 'echo "hello"'` + +Each time you touch the testfile it should show "hello". + +## Use as systemd service + +In `/etc/systemd/system/` create a service config file **onfilechange-demo.service** + +``` +[Unit] +Description=Onfilechange edemo +Wants=multi-user.target + +[Service] +ExecStart=/usr/local/bin/onfilechange.sh -f "/tmp/mytestfile" -c 'systemctl restart apache2' +Restart=on-failure +RestartSec=5s +SyslogIdentifier=onfilechange +User=root +Group=root +Type=simple + +[Install] +WantedBy=multi-user.target +``` + + +Check if the service exists `systemctl status onfilechange-demo`. If so you can start and stop it with `systemctl [start|stop] onfilechange-demo` + diff --git a/onfilechange.sh b/onfilechange.sh old mode 100644 new mode 100755