deajan / osync

A robust two way (bidirectional) file sync script based on rsync with fault tolerance, POSIX ACL support, time control and near realtime sync
http://www.netpower.fr/osync
BSD 3-Clause "New" or "Revised" License
923 stars 99 forks source link

One initiator and multiple targets issue #258

Open 40417256 opened 10 months ago

40417256 commented 10 months ago

I have one initiator replication one way to multiple targets. I use systemd services (one for each target)

Touch a file on the initiator, the sync tasks kicks in but I get the following error in the log:

There is already a local instance [13020@sysvolsync-traytnkca03] of osync running for this replica. Cannot start.#033[0m

So the second server is not synced, is there something I am missing ? I thought since this is a one way operation from the initiator to ALL targets this would work in parallel or at the worst sequentially.

Thanks,

Eric

deajan commented 10 months ago

osync cannot sync simultaneously multiple targets since initiator files will be modified while one sync operations is ongoing. Best thing to do is to launch a batch on modification, ie osync-batch so initiator mods will trigger a full sync to all targets.

40417256 commented 10 months ago

Thanks for the input, but since I require all targets to be updated fairly soon after a modification on the initiator the cron task is not what I need.

What do you think of setting up inotifywait in a systemd service that will run osync-batch.sh ?

Have a great weekend,

Eric

deajan commented 10 months ago

That's an ideal idea in your case. Would require osync modification to launch osync-batch.sh instead of osync itself.

The corresponding lines in osync will be

        if [ "$ConfigFile" != "" ]; then
            osyncSubcmd='bash '$osync_cmd' "'$ConfigFile'" '$opts
        else
            osyncSubcmd='bash '$osync_cmd' '$opts
        fi

where osyncSubcmd would be replaced with bash /path/to/osync_batch.sh

Care to check this manually before I'm implementing this ?