Schedule a job

Run posts and other commands on a schedule, from the Jobs screen or the command line.

Schedule a job

Put a command on a schedule so it runs on its own, with or without the app open.

From the app

Open the "jobs" screen and choose "new job". Pick the command, the profiles and platforms it runs for, and how often it repeats. The "browser driver" control pins which Chrome route that job uses; leave it at the default unless one job needs its own route.

If the schedule is empty, the screen offers "bootstrap schedule" instead: it previews a starter set of rows first, and writes them only when you apply the preview. It never edits a schedule that already holds rows.

Open a row to change it, or run it now without waiting for its time. A dry run previews the pass and claims nothing.

From the command line

List what is scheduled and whether each row is due:

blowhorn schedule list
blowhorn schedule list --due-only

Check every row against the supported schema before it costs you a pass:

blowhorn schedule validate

Seed an empty schedule with the starter set. It refuses a schedule that already holds rows unless you pass --replace, which deletes them all first:

blowhorn schedule bootstrap --dry-run
blowhorn schedule bootstrap

Run one pass by hand, or force one row now:

blowhorn schedule tick --profile all
blowhorn schedule trigger-now 4

Read or write a single row. Row numbers are stable: they are assigned when a row is created and never reused, so a number you noted keeps meaning the same row:

blowhorn schedule get 4
blowhorn schedule upsert --payload '{"Command": "post", "Profile": "all", "Recurrence": "daily"}'
blowhorn schedule delete 4

upsert and delete accept the fingerprint schedule get returns, and refuse a stale edit rather than writing over someone else's change.

What a job can run

A job runs one Blowhorn command with its own profiles, platforms and parameters. post, comment, follow, accept, withdraw, analytics and report are schedulable. find is not: it prints search results and changes nothing.

Recurrence takes once, hourly, daily, weekly, monthly, or every:<minutes> for a minute count. A job whose profile is all runs for every profile except the excluded ones; name a profile in the row to include an excluded one for that job only.

Each pass writes a per-job log under <log-dir>/scheduler/, records its heartbeat so blowhorn schedule status can report it, and appends one line per pass to the run ledger. When the pass cannot reach the store it claims nothing, exits 3, and says so in one line.

Last modified October 9, 2026: docs: sync from master (5f4e718)