Rsync Schedule

It’s usually best to wrap rsync and call it from cron. Preferably with something that doesn’t step on itself for long running syncs, like this:

vi ~/bin/schedule-rsync
#!/bin/bash

THE_USER="remote-account-1"
THE_KEY="remote-account-1" 

SCRIPT_NAME=$(basename "$0")
PIDOF=$(pidof -x $SCRIPT_NAME)

for PID in $PIDOF; do
    if [ $PID != $$ ]; then
        echo "[$(date)] : $SCRIPT_NAME : Process is already running with PID $PID"
        exit 1
    fi
done

# Change to working directory. Assume running as non-root user per cronfile config below
cd ~/bin


rsync \
--archive \
--bwlimit=5m \
--delete \
--delete-excluded \
--exclude .DS* \
--exclude ._* \
--human-readable \
--inplace \
--itemize-changes \
--no-group \
--no-owner \
--no-perms \
--progress \
--recursive \
--rsh "ssh -i ${THE_KEY}" \
--verbose \
--stats \
${THE_USER}@some.server.org\
:/mnt/pool01/folder.1 \
:/mnt/pool01/folder.2 \
:/mnt/pool01/folder.2 \
/mnt/pool02/

Then, call it from a file in the cron drop folder.

echo "0 1 * * * $USER /home/$USER/schedule-rsync  >> /home/$USER/bin/rsync-video.log 2>&1" > /etc/cron.d/schedule-rsync

Last modified March 17, 2026: Shorten menus (c0227ad)