Schedules
TL;DR
client.schedules manages cron-driven jobs on the relay plane: create a schedule with a cron expression and a command, update or delete it, trigger a run now, and review past runs. Schedules are fleet-scoped — pass fleet_id or rely on CMDOP_FLEET_ID.
schedules uses your relay token (CMDOP_TOKEN). All methods are async.
Methods
| Method | What |
|---|---|
list(fleet_id=, page=, per_page=) | List schedules (offset-paginated; also iter / pages). |
get(schedule_id, fleet_id=) | Detail for one schedule. |
create(name=, cron_expr=, command=, ...) | Create a schedule. |
update(schedule_id, ...) | Partial-update a schedule. |
delete(schedule_id, fleet_id=) | Delete a schedule. |
trigger(schedule_id, fleet_id=) | Run now. |
runs(schedule_id, limit=, cursor=) | Run history (cursor-paginated; also iter_runs / pages_runs). |
create also accepts description, timezone (default "UTC"), target_kind ("all_fleet_machines" / "specific_machines"), is_enabled, and machine_ids (for specific_machines).
Create and trigger
async with Client(token="...") as c:
sched = await c.schedules.create(
name="nightly-backup",
cron_expr="0 3 * * *",
command="backup.sh",
timezone="UTC",
target_kind="all_fleet_machines",
)
await c.schedules.trigger(sched.id) # run nowconst sched = await c.schedules.create({
name: "nightly-backup",
cronExpr: "0 3 * * *",
command: "backup.sh",
timezone: "UTC",
targetKind: "all_fleet_machines",
});
await c.schedules.trigger(sched.id);To target specific machines, pass target_kind="specific_machines" with machine_ids=[...].
Update and delete
await c.schedules.update(sched.id, cron_expr="0 4 * * *", is_enabled=False)
await c.schedules.delete(sched.id)await c.schedules.update(sched.id, { cronExpr: "0 4 * * *", isEnabled: false });
await c.schedules.delete(sched.id);Review runs
runs = await c.schedules.runs(sched.id, limit=20)
for r in runs.items:
print(r.status)
# every run, following cursors
async for r in c.schedules.iter_runs(sched.id):
print(r.status)const runs = await c.schedules.runs(sched.id, { limit: 20 });