porter.yaml.
Field Reference
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Service identifier (max 31 chars) |
type | string | Yes | Must be job |
run | string | Yes | Command to execute |
cpuCores | number | Yes | CPU allocation |
ramMegabytes | integer | Yes | Memory allocation in MB |
cron | string | No | Cron schedule expression |
suspendCron | boolean | No | Temporarily disable cron schedule |
allowConcurrent | boolean | No | Allow concurrent job runs |
timeoutSeconds | integer | No | Maximum job duration |
connections | array | No | External cloud connections |
terminationGracePeriodSeconds | integer | No | Graceful shutdown timeout |
gpuCoresNvidia | integer | No | NVIDIA GPU cores |
nodeGroup | string | No | Node group UUID |
Basic Example
cron
Type: string - Optional
A cron expression that defines when the job should run. Uses standard 5-field cron syntax.
| Expression | Description |
|---|---|
0 0 * * * | Daily at midnight |
0 */6 * * * | Every 6 hours |
*/15 * * * * | Every 15 minutes |
0 9 * * 1-5 | Weekdays at 9 AM |
0 0 1 * * | First day of each month |
If no cron expression is provided, the job must be triggered manually using
porter app run --job.suspendCron
Type: boolean - Optional
Temporarily disable the cron schedule without removing it. The job won’t run on schedule but can still be triggered manually.
allowConcurrent
Type: boolean - Optional
Allow multiple instances of the job to run simultaneously. By default, a new job run won’t start if a previous run is still in progress.
timeoutSeconds
Type: integer - Optional
Maximum number of seconds the job is allowed to run before being terminated.
If not specified, jobs may run indefinitely. It’s recommended to set a reasonable timeout for all jobs.
connections
Type: array - Optional
Connect to external cloud services. See Reference for full documentation.
terminationGracePeriodSeconds
Type: integer - Optional
Seconds to wait for graceful shutdown before forcefully terminating the job.
gpuCoresNvidia
Type: integer - Optional
Allocate NVIDIA GPU cores for ML training, inference, or GPU-accelerated processing.
Requires a node group with GPU-enabled instances.
Triggering Jobs Manually
Jobs can be triggered manually using the Porter CLI:Complete Example
Common Use Cases
Database Cleanup
Data Export
ML Training Job
Health Check / Monitoring
Manual Migration Job
Jobs without a
cron expression must be triggered manually using porter app run --job.
