Docs › Cron, systemd, GitHub Actions and plain scripts
Cron, systemd, GitHub Actions and plain scripts
The rv client is a single Python file with no dependencies. It wraps a command, captures exit code, duration and output size, checks evidence files, and reports — and if RunVouch is unreachable your job still runs.
Install
curl -fsSL https://runvouch.com/rv -o ~/bin/rv && chmod +x ~/bin/rv
export RUNVOUCH_KEY=rv_… # put in ~/.profile or the cron envWrap a job
# crontab -e
0 2 * * * rv run nightly-etl --log /var/log/etl.log --evidence-file /data/out/today.parquet -- python3 etl.py--log appends the job's stdout/stderr to a file (and counts as evidence if it grew). --evidence-file requires the file to exist, be non-empty and be modified during the run.
Hourly, weekly, monthly
rv agent hourly-sync --cadence 1h --grace 10m rv agent weekly-digest --cadence 7d --grace 2h --max-runtime 30m
MISSED fires when cadence + grace passes without a start; STALLED when a run exceeds max runtime without ending.
Report cost from any LLM job
RID=$(rv start price-scraper)
rv tool $RID openai.chat --input '{"model":"gpt-5","prompt_hash":"…"}' --cost 0.012 --tokens 4100
rv end $RID --status ok --cost 0.35 --evidence '{"rows": true}'Per-call reporting enables retry-storm and per-run budget detection; per-run reporting is enough for daily caps and drift.
GitHub Actions
- run: rv run nightly-build --evidence-file dist/report.html -- npm run build:report
env:
RUNVOUCH_KEY: ${{ secrets.RUNVOUCH_KEY }}Need a key? Get one free · Stuck? [email protected]