I’m probably thinking about this the wrong way so hopefully someone help me think about the problem differently.
I’ve got one source server running sanoid and two servers that pull data from the source. Both destination servers have a dataset that they pull in common.
Given the method recommended is cron to run syncoid jobs, how would you go about running the jobs such that they can run either A) simultaneously, B) in such a way they don’t interfere with each other, C) at least that the weekly one will retry in a couple hours if it fails.
One destination server is set to run every 4 hours and the other weekly.
For example I get these cron messages on the regular
cannot receive incremental stream: most recent snapshot of <parentdataset> does not match incremental source
CRITICAL ERROR: ssh -i path/to/identity -S /tmp/syncoid-user@<ipaddress>-1689112885
[user@<ipaddress>(mailto:<mailtoinfo> 'zfs send -w -I '"'"'tank/vault
/video'"'"'@'"'"'autosnap_2023-07-11_18:00:05_hourly'"'"' \
'"'"'<parentdataset>'"'"'@'"'"'autosnap_2023-07-11_22:00:08_hourly'"'"' \
| lzop | mbuffer -q -s 128k -m 16M 2>/dev/null' | mbuffer -q -s 128k -m 16M 2>/dev/null \
| lzop -dfc | zfs receive -s -F '<parentdataset>' 2>&1 failed: 256 at /usr/sbin/syncoid line 817.
Cannot sync now: <childdataset1> is already target of a zfs receive process.
Cannot sync now: <childdataset2> is already target of a zfs receive process.
Cannot sync now: <childdataset3> is already target of a zfs receive process.
Not only due to each machine overlapping in time… but the sync job that runs every 4 hours will interfere with itself.