Question: I know has been a bit of discussion about topics similar to this. But here is what I am basically trying to do.

I have a watch directory called `watched` and whenever a file is added to that directory, I want to trigger a script called `syncbh.sh` which will take files out of that directory and upload them to a remote server.

The caveat is that files are created in the `watched` directory by one user (user2), but the script is executed by another (user1).

I've tried using *incron* to accomplish this, but keep running into a major problem because while the script can be executed manually by user1 with root privileges, the *incron* daemon is never actually automatically triggered by a file creation event by the other user2.

I've thought about whether *inoticoming* would be a better alternative, but I'm unclear about how the syntax of this works. If there a better way to accomplish this, or if I end up using *inoticoming* what would the command syntax be to ask it to watch `/home/user1/watched` directory and execute the script `/usr/local/bin/syncbh.sh` if a file is created/modified within that directory?

Any help would be much appreciated.

Answer: 
Using `inoticoming`:

You can put a script in `/etc/init.d/` that runs `inoticoming` at boot time.

1. Create a new folder to hold the `inoticoming` log / last `pid` for the `watched` folder: `sudo mkdir -p /var/log/inoticoming/watched/`
2. Create a script `inoticoming_watched` in `/etc/init.d/`:

\* Remember to change <path\_to\_folder> and <path\_to\_script> to match the full path of the `watched` folder and the full path of the script to execute

```
#!/bin/sh

case "${1}" in
    start)
        inoticoming --logfile '/var/log/inoticoming/watched/inoticoming.log' --pid-file '/var/log/inoticoming/watched/inoticoming_last_pid.txt' <path_to_folder> <path_to_script> \;
    ;;

    stop)
        kill -15 $(< /var/log/inoticoming/watched/inoticoming_last_pid.txt tee)
    ;;

    restart)
        ${0} stop
        sleep 1
        ${0} start
    ;;

    *)
    echo "Usage: ${0} {start|stop|restart}"
    exit 1
    ;;
esac

```

3. Mark the script as executable: `sudo chmod u+x /etc/init.d/inoticoming_watched`
4. Make sure that the script called by `inoticoming_watched` is executable.
5. Update `rc.d` to make the service `inoticoming_watched` start at boot time: `sudo update-rc.d inoticoming_watched defaults`

You can check the `inoticoming` log in `/var/log/inoticoming/watched`.
First of all, a script to watch the `watched` directory:

```
#! /bin/bash

folder=/path-to-watched

inotifywait -m -q  -e create  -e modify  '%:e %w%f' $folder | while read file
  do
    #make the sync here
  done

```

Second To make sync as another user (user2) the :

```
sudo -H -u user2 bash -c 'sh /usr/local/bin/syncbh.sh ' 

```

Now in order to not make a user prompt, you can set your `sudo` password in a file and read the password from this file when needed (note you have to use `-S` with `sudo` to get the password from file the).

Put your `sudo` password in a file, suppose `passwd.txt`, then the command above will be suck like

```
sudo -S -H -u user2 bash -c 'sh /usr/local/bin/syncbh.sh ' < /path-to/passwd.txt

```

Now the overall script will be like:

```
#! /bin/bash

folder=/path-to-watched

inotifywait -m -q  -e create  -e modify  '%:e %w%f' $folder | while read file
  do
      sudo -S -H -u user2 bash -c 'sh /usr/local/bin/syncbh.sh ' < /path-to/passwd.txt      
done

```