vm-babysitter

vm-babysitter

Docker app from Staffwerke GmbH's Repository

Overview

Automatic Backup & Monitoring utility for QEMU/KVM Virtual Machines (powered by Virtnbdbackup) Features: - Manages a list of *non-transient* domains defined in QEMU to be backed up regularly via internal cron task - Checks backup chains integrity of all listed domains, being able to detect inconsistencies and proceed accordingly (e.g. fixing, discarding, creating new ones, etc.) - Configurable backup rotation and retention policy - Ability to create a mirror and keep it updated with Rsync right after backup schedule or at configurable one, with independent retention policy - All main tasks (backup, sync, rotation/retention) can be performed manually by the user from inside the container - Pseudo-interactive tools for domain replication (to local and remote endpoints) and recovery from backups on the local host - Notify about backup chain and Rsync start and end of activities, as also when user intervention is required and about errors (Unraid feature) - Assume a different behavior when detects the server has been started recently, assuming the possibility of a previous crash, and therefore a more strict check of backup chains (Unraid feature)

Requirements

Unraid VM Manager Enabled

Runtime arguments

Network
host
Shell
bash
Privileged
false
Extra Params
--device /dev/fuse --cap-add SYS_ADMIN

Template configuration

Time ZoneVariable

Set container to a desired timezone (usually same as this host)

Target
TZ
Autostart DomainsVariable

Space separated list of domains that will be started along with the container if found powered off (case sensitive)

Target
VM_AUTOSTART_LIST
Ignored DomainsVariable

Space separated list of domains to exclude from backup schedule and automatic checks (case sensitive)

Target
VM_IGNORED_LIST
Backups Rotation (local)Variable

Backups rotation: Number of checkpoints to save incrmentally into a backup chain before to archive it. If set to `0`, backup chain will grow indefinitely (and no retention policies will be applied)

Target
MAX_BACKUPS_PER_CHAIN
Default
30
Path for Backups (local)Pathrw

Path to user share where all backups will be stored

Target
/backups
Default
/mnt/user/backups/domains
Backup ScheduleVariable

Cron expression to schedule incremental backups

Target
BACKUP_SCHEDULE
Default
@daily
Retention Policy (local)Variable

Local retention policy: How many backup chains to keep archived at `LOCAL_BACKUP_PATH`. If set to `0`, disables retention policy on the local endpoint

Target
LOCAL_BACKUP_CHAINS_TO_KEEP
Default
1
SSH KeyPathro

Path to private SSH key to perform operations onto remote servers via SSH and Rsync. Key must be owned by root and file permissions equal to '0600' (in most cases, necessary for send Unraid notifications)

Target
/private/hostname.key
Default
/mnt/user/appdata/vm-babysitter/hostname.key
Unraid IP/HostnameVariable

Unraid IP/Hostname to send notifications (usually, same as this host). It has no effect on non-Unraid OS

Target
UNRAID_NOTIFY_HOST
Default
localhost
Path for Backups (mirror)Variable

Usually, a SSH address to a path into another host, where backup chains will be mirrored. Requires r/w permissions at the remote host. If not set, this feature remains disabled and `RSYNC_` env vars have no effect. (Read documentation for advanced usage)

Target
RSYNC_BACKUP_PATH
Rsync ScheduleVariable

When a cron expression is set, backup mirrors are updated at this specific schedule, instead of immediately after backups schedule

Target
RSYNC_SCHEDULE
Retention Policy (mirror)Variable

Mirror's retention policy: How many backup chains to keep archived at `RSYNC_BACKUP_PATH`. If set to `0`, disables retention policy on the mirror

Target
RSYNC_BACKUP_CHAINS_TO_KEEP
Default
2
Fix Backup Chains After Interrupted TasksVariable

Attempts to repair backup chains when virtnbdbackup was interrupted in the middle of an operation, by removing the last checkpoint at both backup and domain, avoiding thus a forced rotation and creation of a new backup chain. (Set a non-empty value to enable)

Target
VM_ALLOW_BACKUP_CHAIN_FIX
Allow Automatic Powercycle of DomainsVariable

Performs controlled powercycle of running domains under certain scenarios during container startup. If not set, vm-babysitter will ask the user (via logs and Unraid notifications, when available) to manually shut down domains in need of this action. Read documentation for more info (Set a non-empty string to enable)

Target
VM_ALLOW_POWERCYCLE
Check Backups Data IntegrityVariable

Verify data integrity of backups. This operation may take long time, delaying container's full initialization. Only useful under suspect of data corruption (Set a non-empty value to enable)

Target
CHECK_BACKUPS_INTEGRITY
Domain Awaiting TimeoutVariable

Max amount in seconds scripts will await for domains responding to libvirt queries during powercycle operations. Increase this value if you get often warnings about scripts 'giving up' awaiting for slow domains

Target
VM_WAIT_TIME
Default
60
Virtnbdbackup Extra ArgumentsVariable

Extra arguments passed to virtnbdbackup (only tested with `--start-domain`, `--compress` and `--no-color`. Other combinations usually lead to unexpected results

Target
VIRTNBDBACKUP_ARGS
Rsync Extra ArgumentsVariable

Extra arguments passed to Rsync

Target
RSYNC_ARGS
Default
-a
SSH OptionsVariable

Common SSH options for communications with remote, and the unraid hosts (expert use only)

Target
SSH_OPTIONS
Default
-q -o IdentityFile=/private/hostname.key -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectTimeout=10
Internal Path for BackupsVariable

Container path where vm-babysitter will save and vm-restore will search for backups. Container will not start if not set, or if not mounted in r/w mode

Target
LOCAL_BACKUP_PATH
Default
/backups
Path for Domain Disk ImagesPathrw

Change only if domain disk images are stored into a different user share than the default

Target
/mnt/user/domains
Default
/mnt/user/domains
Main Path for LogsPathrw

Persistent bind mount for log files generated by scripts

Target
/logs
Default
/mnt/user/appdata/vm-babysitter/logs
Internal Main Log PathVariable

Container path for the main log file

Target
LOGFILE_PATH
Default
/logs/vm-babysitter.log
Internal Schedule Log PathVariable

Container path for scheduled tasks log file

Target
SCHEDULE_LOGFILE_PATH
Default
/logs/scheduled-tasks.log
Internal Logrotate Config PathVariable

Container path to place and read log rotation config

Target
LOGROTATE_CONFIG_PATH
Default
/tmp/logrotate.d/vm-babysitter
Logrotate ScheduleVariable

Cron expression to schedule internal logs rotation

Target
LOGROTATE_SCHEDULE
Default
@daily
Logrotate SettingsVariable

Parsed string with *escaped* logrotate config to `LOGROTATE_CONFIG_PATH` during container (re)start

Target
LOGROTATE_SETTINGS
Default
compress\n copytruncate\n daily\n dateext\n dateformat .%Y-%m-%d.%H:%M:%S\n missingok\n notifempty\n rotate 30
Virtnbdbackup SocketPathrw

Allows Virtnbdbackup to put its socket onto the main host

Target
/var/tmp
Default
/var/tmp
Libvirt API SocketPathrw

Allow scripts to read and interact with Libvirt socket from inside the container

Target
/run/libvirt
Default
/run/libvirt
Lock FolderPathrw

Allow scripts to put locks onto the main host

Target
/run/lock
Default
/run/lock
Path to Nvram BinariesPathrw

Allow scripts to read/restore per domain nvram binaries for EFI/UEFI boot

Target
/etc/libvirt/qemu/nvram
Default
/etc/libvirt/qemu/nvram
Path to OVMF BinariesPathro

Allow scripts to read/copy common nvram binaries for EFI/UEFI boot

Target
/usr/share/qemu/ovmf-x64
Default
/usr/share/qemu/ovmf-x64

Categories

Details

Repository
ghcr.io/staffwerke/vm-babysitter
Last Updated2026-05-31
First Seen2024-11-23

Run vm-babysitter on Unraid.

vm-babysitter is listed in Community Apps for Unraid OS. Explore Unraid to build a flexible home server, NAS, or homelab.