Cron Jobs
Install scheduled scripts or binaries as systemd timers.
Cron payloads install a script or binary as a scheduled job. Catch implements them as systemd timer units, while yeet accepts a five-field cron expression.
Cron jobs are still services. They have logs, state, cleanup, and saved config.
Cron jobs cannot use iso networking because the native ISO policy path is not
implemented. Yeet rejects the combination instead of presenting an incomplete
isolation boundary. Put an untrusted scheduled workload in a container or VM.
Run these commands from a
Service Workspace. The first
successful cron install writes yeet.toml in the current directory.
yeet cron <svc> ./job.sh "0 9 * * *"
yeet cron <svc> ./job.sh "0 9 * * *" --run-as=backup
yeet cron <svc> ./job.sh "0 9 * * *" -- --job-arg foo
New jobs run as the shared yeet-svc account by default. --run-as selects a
different existing host account, and yeet saves that identity for later runs.
Existing jobs keep their current identity until you migrate one explicitly
with yeet service set <svc> --run-as=yeet-svc.
Yeet saves arguments after -- as payload args and replays them on future
runs.
Re-run yeet cron with the new payload or schedule.
yeet cron <svc> ./job.sh "30 2 * * *"
If a yeet.toml exists, or after the first successful cron install, you can
omit the payload and expression to replay the saved job:
yeet cron <svc>
yeet env copy <svc> ./job.env
yeet env set <svc> LOG_LEVEL=debug
yeet copy ./config.yml <svc>:config/config.yml
Use Binaries & Scripts for payload preparation details.
Cron jobs can use ZFS-backed service roots too, which is useful for jobs that write persistent state or process files under their managed data directory. If the job only prints a heartbeat, a normal service root is usually enough.
yeet cron <svc> ./job.sh "0 9 * * *"
yeet stop <svc>
yeet service set <svc> --service-root=tank/jobs/<svc> --zfs --copy
Cron installs use yeet cron; service-root moves happen afterward through
yeet service set. Stop the job before moving its root. See
ZFS for service-root and snapshot behavior.
yeet status <svc>
yeet logs -f <svc>
yeet rm <svc>
yeet rm --clean <svc>
--clean removes the managed service data root and local yeet.toml entry in
addition to the scheduled job. Read the confirmation prompt before accepting.