Periodically run rsync invoked by cron

Geoff Williams



6,891 latest version

2.0 quality score

Version information

  • 0.1.1 (latest)
  • 0.1.0
released Nov 14th 2015

Start using this module


geoffwilliams/rsync_cron — version 0.1.1 Nov 14th 2015


Build Status

Table of Contents

  1. Overview
  2. Module Description - What the module does and why it is useful
  3. Setup - The basics of getting started with rsync_cron
  4. Usage - Configuration options and additional functionality
  5. Reference - An under-the-hood peek at what the module is doing and how
  6. Limitations - OS compatibility, etc.
  7. Development - Guide for contributing to the module


Manage a cron job to periodically rsync a directory between two computers. sync direction can be in any or both directions.

Rsync+ssh is used to avoid the need for a dedicated rsync service

Module Description

This module uses ssh and rsync to install a cron job to periodically sync directories between hosts. This is ideal for syncronising large directories of flies on a regular basis. Alternatively, this can also be used for machines such as laptops that are not always in reach of the systems they need to sync to.

A brief log file is also created for debugging purposes.


What rsync_cron affects

  • Manages a cron job to sync remote to local, local to remote or bi-directionally (by running both sync jobs sequentially) impact, or execute on the system it's installed on.
  • Doesn't handle deleted files (--delete)
  • Skips overwriting files that are newer (-u)
  • Only attempts to run rsync if the remote destination is online, as detected by the ping command

Setup Requirements

  • SSH keys need to exist on the Puppet Master already, this module just copies them, however, you could use the sshkeys module to generate them
  • SSH needs to be enabled on the host you are connecting to, on the standard port
  • cron and rsync packages must already be installed
  • machines you want to rsync between must be able to ping each other


Setting up the machine to receive the SSH connection

rsync_cron::host { "rsync@mylaptop.localdomain": }

Setup the node classified with this resource to accept a connection using the public key found on the Puppet Master in the /etc/sshkeys/ file

Setting up a machine to run the rsync command

rsync_cron::agent { "rsync@${::fqdn}":
  host => "ftp.localdomain",

Manage a cron job on the node classified with this resource. Targets a local user rsync. Files will be rsync'ed to/from ftp.localdomain

This example is geared around SSH keys generated with the sshkeys module. It is possible to override the this mechanism by specifying the key_file parameter. See source code for details.


  • rsync_cron - Dummy class to get rsync_cron::params class into scope
  • rsync_cron::params - Params pattern class
  • rsync_cron::host - Setup a host to receive connections via rsync+ssh
  • rsync_cron::agent - Setup a cron job to periodically rsync files to and or from another node that has had rsync_cron::host applied to it


Tested on Ubuntu, will probably work elsewhere but untested.


PRs accepted