Create, run, and manage Domino Jobs - batch executions for scripts, training, and data processing. Covers job configuration, hardware tiers, scheduled jobs (cron), monitoring status, viewing logs, and API-driven execution. Use when running batch workloads, scheduling recurring tasks, or automating training pipelines.
This skill helps users create, run, and manage Domino Jobs - batch executions for running scripts, training models, and processing data.
Activate this skill when users want to:
A Job is a batch execution that runs a script or command in Domino. Unlike workspaces, jobs:
train.py)import os
from domino import Domino
domino = Domino(
"project-owner/project-name",
api_key=os.environ["DOMINO_USER_API_KEY"],
host=os.environ["DOMINO_API_HOST"],
)
# Blocking execution - waits for job to complete
domino_run = domino.runs_start_blocking(
["train.py", "--epochs", "100"],
title="Training run from Python SDK"
)
print(domino_run)
# Non-blocking execution - returns immediately
domino_run = domino.runs_start(
["train.py", "--epochs", "100"],
title="Training run from Python SDK"
)
print(f"Job ID: {domino_run['runId']}")
# Check status of non-blocking run
run_status = domino.runs_status(domino_run.get("runId"))
print(f"Status: {run_status['status']}")
Note: Environment variables DOMINO_USER_API_KEY and DOMINO_API_HOST are automatically configured when running within Domino workspaces or jobs.
# Start a job with script
domino run train.py
# Run with arguments
domino run train.py arg1 arg2 arg3
# Wait for job to complete
domino run --wait train.py arg1 arg2
# Run direct command (not a script)
domino run --direct "pip freeze | grep pandas"
curl -X POST "https://your-domino.com/v4/projects/{project_id}/runs" \
-H "X-Domino-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"command": "python train.py",
"hardwareTierId": "tier-id",
"environmentId": "env-id"
}'
python train.py
python train.py --data /mnt/data/train.csv --output /mnt/artifacts/model.pkl
jupyter nbconvert --to notebook --execute notebook.ipynb
Rscript analysis.R
bash pipeline.sh
| Schedule | Cron Expression |
|---|---|
| Every hour | 0 0 * * * ? |
| Daily at midnight | 0 0 0 * * ? |
| Every Monday 9 AM | 0 0 9 ? * MON |
| First of month | 0 0 0 1 * ? |
┌───────────── second (0-59)
│ ┌───────────── minute (0-59)
│ │ ┌───────────── hour (0-23)
│ │ │ ┌───────────── day of month (1-31)
│ │ │ │ ┌───────────── month (1-12)
│ │ │ │ │ ┌───────────── day of week (0-7, SUN-SAT)
│ │ │ │ │ │
* * * * * *
Sequential: Wait for previous job to complete before starting next
# Good for jobs that depend on previous output
# Example: Daily model retrain that uses previous day's data
Concurrent: Allow multiple jobs to run simultaneously
# Good for independent jobs
# Example: Hourly data refresh that doesn't depend on previous runs
Configure in job settings:
Trigger Model API republish after job completes:
Files written to /mnt/ directories are available after job completion:
/mnt/results/ - Custom outputs/mnt/artifacts/ - Model artifactsView logs in Domino UI or via API:
# Get job logs
logs = domino.runs_get_logs(run_id)
print(logs)
All print statements and errors are captured in job logs.
import os
# Domino-provided
run_id = os.environ.get('DOMINO_RUN_ID')
project_name = os.environ.get('DOMINO_PROJECT_NAME')
username = os.environ.get('DOMINO_USER_NAME')
# Custom (set in project or job settings)
api_key = os.environ.get('MY_API_KEY')
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--data-path', required=True)
parser.add_argument('--model-output', required=True)
parser.add_argument('--epochs', type=int, default=100)
args = parser.parse_args()
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info("Starting training...")
logger.info(f"Epoch {epoch}/{total_epochs}")
logger.info("Training complete!")