Update to Render
Snapshot Oct 24, 2026 · 12:46 UTC · version 1.0.2
Collection source: downloaded plugin package. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.
Instructions updated for render-background-workers
Full description — Now says: Value,
Observed in instructions or declared skills. Runtime behavior has not been tested.
Up to 10 plugins free · no card required.
All fields and original values.
Full description
Sep 30, 2026 · 22:43 UTC
Value (Redis),
Oct 24, 2026 · 12:46 UTC
Value,
Skill instructions
Sep 30, 2026 · 22:43 UTC
Value (Redis), or choose between | Celery | Python | Redis / Key Value | Most common Python task queue | | Sidekiq | Ruby | Redis / Key Value | Standard for Rails | | BullMQ | Node.js | Redis / Key Value | Modern Node queue (Redis-based)...
Oct 24, 2026 · 12:46 UTC
Value, or choose between Before deploying, restarting, or changing shutdown behavior, read `references/deployments.md`. Before configuring or troubleshooting a worker's outbound private-network connection, read `references/private-networ...
Supporting files
Sep 30, 2026 · 22:43 UTC
[{"relative_path":"references/graceful-shutdown.md","size_in_bytes":3515},{"relative_path":"references/queue-framework-setup.md","size_in_bytes":4893}]
Oct 24, 2026 · 12:46 UTC
[{"relative_path":"references/deployments.md","size_in_bytes":8095},{"relative_path":"references/graceful-shutdown.md","size_in_bytes":3249},{"relative_path":"references/private-networking.md","size_in_bytes":4390},{"relative_path":"refe...
Compare saved observations
Download comparison JSONSKILL.md text changes
− removed · + added
--- before +++ after @@ -4,7 +4,7 @@ Sets up and configures background workers on Render for queue-based job processing. Use when the user needs to process async jobs, consume from a queue, run Celery/Sidekiq/BullMQ/Asynq/Oban workers, handle graceful - shutdown with SIGTERM, wire a worker to Key Value (Redis), or choose between + shutdown with SIGTERM, wire a worker to Key Value, or choose between workers and cron jobs for background work. Trigger terms: background worker, async jobs, queue consumer, Celery, Sidekiq, BullMQ, Asynq, Oban, job processing, SIGTERM, graceful shutdown. @@ -29,6 +29,10 @@ Per-framework setup and signal-handling detail: `references/queue-framework-setup.md`, `references/graceful-shutdown.md`. +Before deploying, restarting, or changing shutdown behavior, read `references/deployments.md`. +Before configuring or troubleshooting a worker's outbound private-network connection, read `references/private-networking.md`. +When choosing between a worker, cron job, and Workflow, read `references/service-types.md`. + ## How Workers Work - **Long-running services** with **no inbound (HTTP) traffic**. Render does not expose a public URL or internal hostname for workers the way it does for web or private services—**workers cannot receive private network traffic directed at them**. @@ -39,11 +43,11 @@ | Framework | Language | Queue backend | Notes | |-----------|----------|---------------|--------| -| Celery | Python | Redis / Key Value | Most common Python task queue | -| Sidekiq | Ruby | Redis / Key Value | Standard for Rails | -| BullMQ | Node.js | Redis / Key Value | Modern Node queue (Redis-based) | -| Asynq | Go | Redis / Key Value | Go async task processing | -| Oban | Elixir | **Postgres** (not Redis) | Queue stored in the database | +| Celery | Python | Key Value | Most common Python task queue | +| Sidekiq | Ruby | Key Value | Standard for Rails | +| BullMQ | Node.js | Key Value | Modern Node queue | +| Asynq | Go | Key Value | Go async task processing | +| Oban | Elixir | **Postgres** (not a Key Value queue) | Queue stored in the database | ## Pairing with Key Value @@ -61,13 +65,12 @@ | Always-on queue consumer | **Background Worker** | Polls continuously; long-lived process | | Periodic scheduled task | **Cron Job** | Runs on a schedule, **exits**; **12h max** per run | | Distributed parallel compute | **Workflow** | Each run gets its own instance; fan-out patterns | -| High-volume or bursty jobs | **Workflow** | Scales per run; **no idle instance cost** between runs | +| High-volume or bursty jobs | **Workflow** | Scales per run without a continuously running worker instance | ## Graceful Shutdown -- Before stopping an instance, Render sends **`SIGTERM`**, then waits up to **`maxShutdownDelaySeconds`** (**1–300**, **default 30**) before **`SIGKILL`**. - Workers should: **(1)** stop accepting new jobs, **(2)** finish the current job or **checkpoint** progress, **(3)** close connections, **(4)** exit **0**. -- Set **`maxShutdownDelaySeconds`** to at least your **longest safe job duration** (see Dashboard or Blueprint). +- Follow `references/deployments.md` for Render's current drain, signal, and shutdown-delay behavior. Language- and framework-specific handlers: `references/graceful-shutdown.md`. @@ -81,6 +84,7 @@ name: jobs plan: starter region: oregon + maxmemoryPolicy: noeviction ipAllowList: [] - type: worker @@ -106,6 +110,9 @@ |--------|------| | Celery, Sidekiq, BullMQ, Asynq, Oban setup + YAML | `references/queue-framework-setup.md` | | SIGTERM, `maxShutdownDelaySeconds`, per-language patterns | `references/graceful-shutdown.md` | +| Deploy lifecycle, shutdown, restart, and verification | `references/deployments.md` | +| Private-network scope, internal addresses, and troubleshooting | `references/private-networking.md` | +| Service-type selection and execution models | `references/service-types.md` | ## Related Skills @@ -113,3 +120,16 @@ - **render-blueprints** — Full `render.yaml` schema, `fromService`, projects - **render-networking** — Private URLs, what can call what - **render-scaling** — Worker plans, instance counts, limits + +<!-- shared:documentation-retrieval --> +## Current documentation retrieval + +Whenever this skill directs you to consult current Render documentation: + +1. Retrieve the linked Markdown document directly with an available URL-fetching tool or HTTP client, such as `curl`. Do not substitute web-search summaries for the document. +2. Confirm that retrieval succeeded and returned the expected document, then read its contents. Saving a file or printing its path is not sufficient. +3. If the request fails or your tool cannot read the Markdown response, open and read the linked HTML version instead. +4. If neither version can be retrieved, disclose that the current reference is unavailable and follow any topic-specific fallback in the skill. Use bundled guidance only for stable constraints, and do not guess at changeable platform details. + +When a task requires multiple references, apply this workflow to each one and distinguish the documents you verified from those that remain unavailable. +<!-- /shared:documentation-retrieval -->
Full technical diff · 3 changed fields
changed /description
"Sets up and configures background workers on Render for queue-based job processing. Use when the user needs to process async jobs, consume from a queue, run Celery/Sidekiq/BullMQ/Asynq/Oban workers, handle graceful shutdown with SIGTERM, wire a worker to Key Value (Redis), or choose between workers and cron jobs for background work. Trigger terms: background worker, async jobs, queue consumer, Celery, Sidekiq, BullMQ, Asynq, Oban, job processing, SIGTERM, graceful shutdown."
"Sets up and configures background workers on Render for queue-based job processing. Use when the user needs to process async jobs, consume from a queue, run Celery/Sidekiq/BullMQ/Asynq/Oban workers, handle graceful shutdown with SIGTERM, wire a worker to Key Value, or choose between workers and cron jobs for background work. Trigger terms: background worker, async jobs, queue consumer, Celery, Sidekiq, BullMQ, Asynq, Oban, job processing, SIGTERM, graceful shutdown."
changed /included_files
[
{
"relative_path": "references/graceful-shutdown.md",
"size_in_bytes": 3515
},
{
"relative_path": "references/queue-framework-setup.md",
"size_in_bytes": 4893
}
][
{
"relative_path": "references/deployments.md",
"size_in_bytes": 8095
},
{
"relative_path": "references/graceful-shutdown.md",
"size_in_bytes": 3249
},
{
"relative_path": "references/private-networking.md",
"size_in_bytes": 4390
},
{
"relative_path": "references/queue-framework-setup.md",
"size_in_bytes": 4914
},
{
"relative_path": "references/service-types.md",
"size_in_bytes": 4703
}
]changed /skill_md_contents
"---\nname: render-background-workers\ndescription: >-\n Sets up and configures background workers on Render for queue-based job\n processing. Use when the user needs to process async jobs, consume from a\n queue, run Celery/Sidekiq/BullMQ/Asynq/Oban workers, handle graceful\n shutdown with SIGTERM, wire a worker to Key Value (Redis), or choose between\n workers and cron jobs for background work.\n Trigger terms: background worker, async jobs, queue consumer, Celery,\n Sidekiq, BullMQ, Asynq, Oban, job processing, SIGTERM, graceful shutdown.\nlicense: MIT\ncompatibility: Render background worker services\nmetadata:\n author: Render\n version: \"1.0.0\"\n category: compute\n---\n\n# Render Background Workers\n\nThis skill explains **worker** services on Render: processes that **consume jobs from a queue** instead of serving HTTP. Pair with **render-blueprints**, **render-env-vars**, and **render-networking** when wiring `render.yaml` and private connectivity.\n\n## When to Use\n\n- Designing or debugging **queue-backed workers** (Celery, Sidekiq, BullMQ, Asynq, etc.)\n- Choosing between a **worker**, **Cron Job**, or **Workflow** for background work\n- Configuring **Render Key Value** as a **broker** (not a cache) with correct **eviction policy**\n- Implementing **graceful shutdown** so in-flight jobs are not lost on deploy\n\nPer-framework setup and signal-handling detail: `references/queue-framework-setup.md`, `references/graceful-shutdown.md`.\n\n## How Workers Work\n\n- **Long-running services** with **no inbound (HTTP) traffic**. Render does not expose a public URL or internal hostname for workers the way it does for web or private services—**workers cannot receive private network traffic directed at them**.\n- The typical pattern is a **poll loop**: the process connects to a **queue backend** (often **Render Key Value**, Redis-compatible **Valkey 8**) and **pulls jobs**.\n- Workers **can initiate outbound connections** on the private network—to **PostgreSQL**, **Key Value**, **private services**, **web services** (internal URLs), and the public internet—subject to your plan and firewall rules.\n\n## Queue Framework Overview\n\n| Framework | Language | Queue backend | Notes |\n|-----------|----------|---------------|--------|\n| Celery | Python | Redis / Key Value | Most common Python task queue |\n| Sidekiq | Ruby | Redis / Key Value | Standard for Rails |\n| BullMQ | Node.js | Redis / Key Value | Modern Node queue (Redis-based) |\n| Asynq | Go | Redis / Key Value | Go async task processing |\n| Oban | Elixir | **Postgres** (not Redis) | Queue stored in the database |\n\n## Pairing with Key Value\n\n- Use **Render Key Value** as the **job broker** when your framework expects Redis.\n- Set **maxmemory policy** to **`noeviction`**. **`allkeys-lru`** and similar policies are for **caches**; evicting queue keys **drops jobs**.\n- Wire **`REDIS_URL`** (or your framework’s equivalent) via **`fromService`** with `type: keyvalue` and `property: connectionString` in the Blueprint.\n- **Blueprints require `ipAllowList`** on Key Value—include the CIDRs that should reach the instance (often `[]` for private-network-only access; see **render-blueprints** / Key Value field reference).\n\nSee `references/queue-framework-setup.md` for minimal app + YAML examples.\n\n## Worker vs Cron vs Workflow\n\n| Need | Use | Why |\n|------|-----|-----|\n| Always-on queue consumer | **Background Worker** | Polls continuously; long-lived process |\n| Periodic scheduled task | **Cron Job** | Runs on a schedule, **exits**; **12h max** per run |\n| Distributed parallel compute | **Workflow** | Each run gets its own instance; fan-out patterns |\n| High-volume or bursty jobs | **Workflow** | Scales per run; **no idle instance cost** between runs |\n\n## Graceful Shutdown\n\n- Before stopping an instance, Render sends **`SIGTERM`**, then waits up to **`maxShutdownDelaySeconds`** (**1–300**, **default 30**) before **`SIGKILL`**.\n- Workers should: **(1)** stop accepting new jobs, **(2)** finish the current job or **checkpoint** progress, **(3)** close connections, **(4)** exit **0**.\n- Set **`maxShutdownDelaySeconds`** to at least your **longest safe job duration** (see Dashboard or Blueprint).\n\nLanguage- and framework-specific handlers: `references/graceful-shutdown.md`.\n\n## Blueprint Configuration\n\nMinimal pattern: **`type: worker`**, **`runtime`**, **`buildCommand`**, **`startCommand`**, and **`envVars`** wired from Key Value.\n\n```yaml\nservices:\n - type: keyvalue\n name: jobs\n plan: starter\n region: oregon\n ipAllowList: []\n\n - type: worker\n name: task-worker\n runtime: python\n region: oregon\n plan: starter\n buildCommand: pip install -r requirements.txt\n startCommand: celery -A tasks worker --loglevel=info\n envVars:\n - key: REDIS_URL\n fromService:\n name: jobs\n type: keyvalue\n property: connectionString\n```\n\nOptional: **`maxShutdownDelaySeconds`** on the worker service for longer draining jobs.\n\n## References\n\n| Topic | File |\n|--------|------|\n| Celery, Sidekiq, BullMQ, Asynq, Oban setup + YAML | `references/queue-framework-setup.md` |\n| SIGTERM, `maxShutdownDelaySeconds`, per-language patterns | `references/graceful-shutdown.md` |\n\n## Related Skills\n\n- **render-deploy** — First deploy, CLI, service creation\n- **render-blueprints** — Full `render.yaml` schema, `fromService`, projects\n- **render-networking** — Private URLs, what can call what\n- **render-scaling** — Worker plans, instance counts, limits\n"
"---\nname: render-background-workers\ndescription: >-\n Sets up and configures background workers on Render for queue-based job\n processing. Use when the user needs to process async jobs, consume from a\n queue, run Celery/Sidekiq/BullMQ/Asynq/Oban workers, handle graceful\n shutdown with SIGTERM, wire a worker to Key Value, or choose between\n workers and cron jobs for background work.\n Trigger terms: background worker, async jobs, queue consumer, Celery,\n Sidekiq, BullMQ, Asynq, Oban, job processing, SIGTERM, graceful shutdown.\nlicense: MIT\ncompatibility: Render background worker services\nmetadata:\n author: Render\n version: \"1.0.0\"\n category: compute\n---\n\n# Render Background Workers\n\nThis skill explains **worker** services on Render: processes that **consume jobs from a queue** instead of serving HTTP. Pair with **render-blueprints**, **render-env-vars**, and **render-networking** when wiring `render.yaml` and private connectivity.\n\n## When to Use\n\n- Designing or debugging **queue-backed workers** (Celery, Sidekiq, BullMQ, Asynq, etc.)\n- Choosing between a **worker**, **Cron Job**, or **Workflow** for background work\n- Configuring **Render Key Value** as a **broker** (not a cache) with correct **eviction policy**\n- Implementing **graceful shutdown** so in-flight jobs are not lost on deploy\n\nPer-framework setup and signal-handling detail: `references/queue-framework-setup.md`, `references/graceful-shutdown.md`.\n\nBefore deploying, restarting, or changing shutdown behavior, read `references/deployments.md`.\nBefore configuring or troubleshooting a worker's outbound private-network connection, read `references/private-networking.md`.\nWhen choosing between a worker, cron job, and Workflow, read `references/service-types.md`.\n\n## How Workers Work\n\n- **Long-running services** with **no inbound (HTTP) traffic**. Render does not expose a public URL or internal hostname for workers the way it does for web or private services—**workers cannot receive private network traffic directed at them**.\n- The typical pattern is a **poll loop**: the process connects to a **queue backend** (often **Render Key Value**, Redis-compatible **Valkey 8**) and **pulls jobs**.\n- Workers **can initiate outbound connections** on the private network—to **PostgreSQL**, **Key Value**, **private services**, **web services** (internal URLs), and the public internet—subject to your plan and firewall rules.\n\n## Queue Framework Overview\n\n| Framework | Language | Queue backend | Notes |\n|-----------|----------|---------------|--------|\n| Celery | Python | Key Value | Most common Python task queue |\n| Sidekiq | Ruby | Key Value | Standard for Rails |\n| BullMQ | Node.js | Key Value | Modern Node queue |\n| Asynq | Go | Key Value | Go async task processing |\n| Oban | Elixir | **Postgres** (not a Key Value queue) | Queue stored in the database |\n\n## Pairing with Key Value\n\n- Use **Render Key Value** as the **job broker** when your framework expects Redis.\n- Set **maxmemory policy** to **`noeviction`**. **`allkeys-lru`** and similar policies are for **caches**; evicting queue keys **drops jobs**.\n- Wire **`REDIS_URL`** (or your framework’s equivalent) via **`fromService`** with `type: keyvalue` and `property: connectionString` in the Blueprint.\n- **Blueprints require `ipAllowList`** on Key Value—include the CIDRs that should reach the instance (often `[]` for private-network-only access; see **render-blueprints** / Key Value field reference).\n\nSee `references/queue-framework-setup.md` for minimal app + YAML examples.\n\n## Worker vs Cron vs Workflow\n\n| Need | Use | Why |\n|------|-----|-----|\n| Always-on queue consumer | **Background Worker** | Polls continuously; long-lived process |\n| Periodic scheduled task | **Cron Job** | Runs on a schedule, **exits**; **12h max** per run |\n| Distributed parallel compute | **Workflow** | Each run gets its own instance; fan-out patterns |\n| High-volume or bursty jobs | **Workflow** | Scales per run without a continuously running worker instance |\n\n## Graceful Shutdown\n\n- Workers should: **(1)** stop accepting new jobs, **(2)** finish the current job or **checkpoint** progress, **(3)** close connections, **(4)** exit **0**.\n- Follow `references/deployments.md` for Render's current drain, signal, and shutdown-delay behavior.\n\nLanguage- and framework-specific handlers: `references/graceful-shutdown.md`.\n\n## Blueprint Configuration\n\nMinimal pattern: **`type: worker`**, **`runtime`**, **`buildCommand`**, **`startCommand`**, and **`envVars`** wired from Key Value.\n\n```yaml\nservices:\n - type: keyvalue\n name: jobs\n plan: starter\n region: oregon\n maxmemoryPolicy: noeviction\n ipAllowList: []\n\n - type: worker\n name: task-worker\n runtime: python\n region: oregon\n plan: starter\n buildCommand: pip install -r requirements.txt\n startCommand: celery -A tasks worker --loglevel=info\n envVars:\n - key: REDIS_URL\n fromService:\n name: jobs\n type: keyvalue\n property: connectionString\n```\n\nOptional: **`maxShutdownDelaySeconds`** on the worker service for longer draining jobs.\n\n## References\n\n| Topic | File |\n|--------|------|\n| Celery, Sidekiq, BullMQ, Asynq, Oban setup + YAML | `references/queue-framework-setup.md` |\n| SIGTERM, `maxShutdownDelaySeconds`, per-language patterns | `references/graceful-shutdown.md` |\n| Deploy lifecycle, shutdown, restart, and verification | `references/deployments.md` |\n| Private-network scope, internal addresses, and troubleshooting | `references/private-networking.md` |\n| Service-type selection and execution models | `references/service-types.md` |\n\n## Related Skills\n\n- **render-deploy** — First deploy, CLI, service creation\n- **render-blueprints** — Full `render.yaml` schema, `fromService`, projects\n- **render-networking** — Private URLs, what can call what\n- **render-scaling** — Worker plans, instance counts, limits\n\n<!-- shared:documentation-retrieval -->\n## Current documentation retrieval\n\nWhenever this skill directs you to consult current Render documentation:\n\n1. Retrieve the linked Markdown document directly with an available URL-fetching tool or HTTP client, such as `curl`. Do not substitute web-search summaries for the document.\n2. Confirm that retrieval succeeded and returned the expected document, then read its contents. Saving a file or printing its path is not sufficient.\n3. If the request fails or your tool cannot read the Markdown response, open and read the linked HTML version instead.\n4. If neither version can be retrieved, disclose that the current reference is unavailable and follow any topic-specific fallback in the skill. Use bundled guidance only for stable constraints, and do not guess at changeable platform details.\n\nWhen a task requires multiple references, apply this workflow to each one and distinguish the documents you verified from those that remain unavailable.\n<!-- /shared:documentation-retrieval -->\n"
Full snapshot data
{
"description": "Sets up and configures background workers on Render for queue-based job processing. Use when the user needs to process async jobs, consume from a queue, run Celery/Sidekiq/BullMQ/Asynq/Oban workers, handle graceful shutdown with SIGTERM, wire a worker to Key Value, or choose between workers and cron jobs for background work. Trigger terms: background worker, async jobs, queue consumer, Celery, Sidekiq, BullMQ, Asynq, Oban, job processing, SIGTERM, graceful shutdown.",
"included_files": [
{
"relative_path": "references/deployments.md",
"size_in_bytes": 8095
},
{
"relative_path": "references/graceful-shutdown.md",
"size_in_bytes": 3249
},
{
"relative_path": "references/private-networking.md",
"size_in_bytes": 4390
},
{
"relative_path": "references/queue-framework-setup.md",
"size_in_bytes": 4914
},
{
"relative_path": "references/service-types.md",
"size_in_bytes": 4703
}
],
"name": "render-background-workers",
"skill_md_contents": "---\nname: render-background-workers\ndescription: >-\n Sets up and configures background workers on Render for queue-based job\n processing. Use when the user needs to process async jobs, consume from a\n queue, run Celery/Sidekiq/BullMQ/Asynq/Oban workers, handle graceful\n shutdown with SIGTERM, wire a worker to Key Value, or choose between\n workers and cron jobs for background work.\n Trigger terms: background worker, async jobs, queue consumer, Celery,\n Sidekiq, BullMQ, Asynq, Oban, job processing, SIGTERM, graceful shutdown.\nlicense: MIT\ncompatibility: Render background worker services\nmetadata:\n author: Render\n version: \"1.0.0\"\n category: compute\n---\n\n# Render Background Workers\n\nThis skill explains **worker** services on Render: processes that **consume jobs from a queue** instead of serving HTTP. Pair with **render-blueprints**, **render-env-vars**, and **render-networking** when wiring `render.yaml` and private connectivity.\n\n## When to Use\n\n- Designing or debugging **queue-backed workers** (Celery, Sidekiq, BullMQ, Asynq, etc.)\n- Choosing between a **worker**, **Cron Job**, or **Workflow** for background work\n- Configuring **Render Key Value** as a **broker** (not a cache) with correct **eviction policy**\n- Implementing **graceful shutdown** so in-flight jobs are not lost on deploy\n\nPer-framework setup and signal-handling detail: `references/queue-framework-setup.md`, `references/graceful-shutdown.md`.\n\nBefore deploying, restarting, or changing shutdown behavior, read `references/deployments.md`.\nBefore configuring or troubleshooting a worker's outbound private-network connection, read `references/private-networking.md`.\nWhen choosing between a worker, cron job, and Workflow, read `references/service-types.md`.\n\n## How Workers Work\n\n- **Long-running services** with **no inbound (HTTP) traffic**. Render does not expose a public URL or internal hostname for workers the way it does for web or private services—**workers cannot receive private network traffic directed at them**.\n- The typical pattern is a **poll loop**: the process connects to a **queue backend** (often **Render Key Value**, Redis-compatible **Valkey 8**) and **pulls jobs**.\n- Workers **can initiate outbound connections** on the private network—to **PostgreSQL**, **Key Value**, **private services**, **web services** (internal URLs), and the public internet—subject to your plan and firewall rules.\n\n## Queue Framework Overview\n\n| Framework | Language | Queue backend | Notes |\n|-----------|----------|---------------|--------|\n| Celery | Python | Key Value | Most common Python task queue |\n| Sidekiq | Ruby | Key Value | Standard for Rails |\n| BullMQ | Node.js | Key Value | Modern Node queue |\n| Asynq | Go | Key Value | Go async task processing |\n| Oban | Elixir | **Postgres** (not a Key Value queue) | Queue stored in the database |\n\n## Pairing with Key Value\n\n- Use **Render Key Value** as the **job broker** when your framework expects Redis.\n- Set **maxmemory policy** to **`noeviction`**. **`allkeys-lru`** and similar policies are for **caches**; evicting queue keys **drops jobs**.\n- Wire **`REDIS_URL`** (or your framework’s equivalent) via **`fromService`** with `type: keyvalue` and `property: connectionString` in the Blueprint.\n- **Blueprints require `ipAllowList`** on Key Value—include the CIDRs that should reach the instance (often `[]` for private-network-only access; see **render-blueprints** / Key Value field reference).\n\nSee `references/queue-framework-setup.md` for minimal app + YAML examples.\n\n## Worker vs Cron vs Workflow\n\n| Need | Use | Why |\n|------|-----|-----|\n| Always-on queue consumer | **Background Worker** | Polls continuously; long-lived process |\n| Periodic scheduled task | **Cron Job** | Runs on a schedule, **exits**; **12h max** per run |\n| Distributed parallel compute | **Workflow** | Each run gets its own instance; fan-out patterns |\n| High-volume or bursty jobs | **Workflow** | Scales per run without a continuously running worker instance |\n\n## Graceful Shutdown\n\n- Workers should: **(1)** stop accepting new jobs, **(2)** finish the current job or **checkpoint** progress, **(3)** close connections, **(4)** exit **0**.\n- Follow `references/deployments.md` for Render's current drain, signal, and shutdown-delay behavior.\n\nLanguage- and framework-specific handlers: `references/graceful-shutdown.md`.\n\n## Blueprint Configuration\n\nMinimal pattern: **`type: worker`**, **`runtime`**, **`buildCommand`**, **`startCommand`**, and **`envVars`** wired from Key Value.\n\n```yaml\nservices:\n - type: keyvalue\n name: jobs\n plan: starter\n region: oregon\n maxmemoryPolicy: noeviction\n ipAllowList: []\n\n - type: worker\n name: task-worker\n runtime: python\n region: oregon\n plan: starter\n buildCommand: pip install -r requirements.txt\n startCommand: celery -A tasks worker --loglevel=info\n envVars:\n - key: REDIS_URL\n fromService:\n name: jobs\n type: keyvalue\n property: connectionString\n```\n\nOptional: **`maxShutdownDelaySeconds`** on the worker service for longer draining jobs.\n\n## References\n\n| Topic | File |\n|--------|------|\n| Celery, Sidekiq, BullMQ, Asynq, Oban setup + YAML | `references/queue-framework-setup.md` |\n| SIGTERM, `maxShutdownDelaySeconds`, per-language patterns | `references/graceful-shutdown.md` |\n| Deploy lifecycle, shutdown, restart, and verification | `references/deployments.md` |\n| Private-network scope, internal addresses, and troubleshooting | `references/private-networking.md` |\n| Service-type selection and execution models | `references/service-types.md` |\n\n## Related Skills\n\n- **render-deploy** — First deploy, CLI, service creation\n- **render-blueprints** — Full `render.yaml` schema, `fromService`, projects\n- **render-networking** — Private URLs, what can call what\n- **render-scaling** — Worker plans, instance counts, limits\n\n<!-- shared:documentation-retrieval -->\n## Current documentation retrieval\n\nWhenever this skill directs you to consult current Render documentation:\n\n1. Retrieve the linked Markdown document directly with an available URL-fetching tool or HTTP client, such as `curl`. Do not substitute web-search summaries for the document.\n2. Confirm that retrieval succeeded and returned the expected document, then read its contents. Saving a file or printing its path is not sufficient.\n3. If the request fails or your tool cannot read the Markdown response, open and read the linked HTML version instead.\n4. If neither version can be retrieved, disclose that the current reference is unavailable and follow any topic-specific fallback in the skill. Use bundled guidance only for stable constraints, and do not guess at changeable platform details.\n\nWhen a task requires multiple references, apply this workflow to each one and distinguish the documents you verified from those that remain unavailable.\n<!-- /shared:documentation-retrieval -->\n"
}SHA-256 of public snapshot: e87c4009aedc76fa6c68d0c1d4b762f7d87a06946c298f20c26ded5c7f8d4a80