Rippler docs
Command line

Crontab handling

Preview what rippler sync will change, understand its safeguards and restore a backup.

rippler sync edits your crontab. This page shows exactly what changes and how to reverse them.

Run it with --dry-run first to print the plan without changing anything.

What it changes

Each job without a monitor gets one, and the line is wrapped:

- 0 3 * * * /usr/local/bin/backup.sh --full
+ 0 3 * * * rippler exec 0kDRYQz -- /usr/local/bin/backup.sh --full

Your schedule, your command and your indentation are unchanged.

What it leaves alone

  • Comments and blank lines
  • Variable assignments like MAILTO= or PATH=
  • Lines it has already wrapped, so running sync twice does nothing
  • @reboot jobs, which have no schedule to expect pings against. They are reported and skipped.
  • Everything outside your own crontab. See Where it looks.

Where it looks

Cron reads jobs from more than one place, and sync reports all of them. Only your own crontab is edited:

WhereFoundEdited
Your crontab (crontab -e)yesyes
/etc/crontabyesno
/etc/cron.d/*yesno
Other users' crontabsonly when run as rootno
/etc/cron.hourly, .daily, .weekly, .monthlylistedno

/etc/crontab and /etc/cron.d/ need root and are usually owned by a package, so sync does not rewrite them. An apt upgrade would undo the edit, and a bad rewrite disables every job in the file. Run rippler sync --adopt-system to create the monitors for those jobs and print the finished lines to paste in yourself:

Paste these into /etc/cron.d/backup (they keep the user column — a system file needs it)
  # line 4, was: 0 3 * * * backups /usr/local/bin/backup.sh --full
  0 3 * * * backups rippler exec 0kDRYQz -- /usr/local/bin/backup.sh --full

Those monitors stay Waiting until the lines are in place. A monitor that has never been pinged is never marked late, so nothing alerts in the meantime.

/etc/crontab and /etc/cron.d/ take a user column between the schedule and the command. sync reads it and puts it back. If you write one of these lines by hand, keep the column. Without it cron reads the command as a username and discards the whole file.

Files in /etc/cron.d/ whose names contain a dot, such as backup.bak or foo.dpkg-old, are skipped, because cron ignores them.

The run-parts directories

Scripts in /etc/cron.daily and its siblings have no crontab line to wrap. The schedule belongs to the directory. sync lists what is in them and stops there. To monitor one, either move it to a crontab line or add the ping to the script itself.

For the same reason the stock /etc/crontab lines that invoke run-parts are reported and skipped. Wrapping one would monitor run-parts itself, which reports success even when every script inside fails.

Schedules

Five-field expressions are used as they are. Shorthands are expanded:

ShorthandBecomes
@yearly, @annually0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily, @midnight0 0 * * *
@hourly0 * * * *
@rebootskipped

Schedules are registered as UTC. If your machine's cron runs in another timezone, change the monitor's timezone in the app afterwards — otherwise expected ping times will be off by your offset and you may get false alerts.

Naming

Monitors are named after the program in the job, so /usr/local/bin/backup.sh --full becomes backup.sh. Wrappers and options are skipped:

JobNamed
/usr/local/bin/backup.sh --fullbackup.sh
test -x /usr/bin/certbot && certbot -q renewcertbot
cd /srv/app && ./manage.py cleanupmanage.py
python3 /srv/app/manage.py cleanupmanage.py
flock -n /var/lock/backup.lock /usr/local/bin/backupbackup
sudo -u www-data /usr/bin/php /var/www/artisan schedule:runartisan
/opt/cleanup.sh >> /var/log/cleanup.log 2>&1cleanup.sh

Guards (test, [, cd), wrappers (sudo, flock, timeout, nice), interpreters (python3, php, node), options, redirections and environment assignments are all skipped. When it recognises nothing it uses the first word.

You can rename them in the app. sync matches on the monitor id in the wrapper, not the name, so it does not rename them back.

Undoing it

sync saves your crontab before it changes anything and prints the path. To go back:

crontab ~/.rippler/crontab-backup-2026-08-29T03-08-11-803Z.txt

Restoring the crontab does not delete the monitors that were created. Remove those in the app if you do not want them.

Fix a stale monitor reference

! line 6 points at monitor jGDc_zz, which is not in this account

That line is wrapped for a monitor that has since been deleted. sync reports it and does not create a replacement.

To fix it, remove the rippler exec <id> -- part from that line and run sync again.

On this page