• mitchell released this 2026-09-24 13:02:31 -07:00 | 135 commits to main since this release

    Snapshot schedules are real cron jobs, written and owned by Ham Lab

    A schedule is now a line in /etc/cron.d/hamlab-zfs, which Ham Lab owns and rewrites whole
    whenever the schedules change; the line calls hamlab zfs-snapshot <id> as the account Ham
    Lab runs as, reaching zfs through sudo exactly as the daemon does. The daemon's own ticker
    is gone. Snapshots are backup-shaped and should not stop because a web console is down,
    being upgraded, or uninstalled — and a cron line is greppable by anyone looking at the
    machine the normal way, which a schedule hidden inside a daemon is not.

    A cron expression is now the single description of when a schedule fires: the four common
    shapes render to one, a custom schedule states it outright, and the next run is read back
    with the same evaluator the Jobs tab uses on everyone else's lines. So the page, the file
    and the prediction cannot disagree.

    Schedules gain a custom cron expression and an optional snapshot name prefix. What a run
    did moves out of the policy into zfs-runs/.json beside the config, because the cron job
    is a separate process and must never write state.json behind the daemon's back.

    The detected external job can be adopted: its schedule, retention and dataset are read out
    of the cron line into a new Ham Lab schedule, ready to check rather than retype.

    Downloads