Troubleshooting
Long exec calls time out at ~100s (use exec_async). VMs stuck pending usually means capacity or zero balance. Domains stuck verifying means the CNAME isn't live yet. Zero balance archives your VMs (recoverable 24h). A database you can't reach is private — connect by name from the same project.
The five most common snags, and the fix for each.
A long command times out (~100s / “524”)
exec runs synchronously and is capped at roughly 100 seconds by the edge proxy — a npm ci, a build, or a big apt-get will hit it and return a timeout/524.
Fix: run long work with exec_async (start, non-blocking) + exec_poll (drain output until done). Your agent does this automatically when it expects a long command; if you’re scripting, reach for the async pair for anything over ~60s.
VM stuck in “pending” / “creating”
A VM that won’t reach running is almost always one of:
- Zero balance — a VM can’t start with no funds. Check
account_status; top up if needed. - Capacity — if a create returns a
503, there’s no host capacity right now. That’s a real limit, not a glitch — retry shortly rather than hammering.
Use wait_for_vm to block until it’s up (or times out) instead of polling by hand.
Domain stuck on “verifying”
wait_for_domain keeps returning unverified when the CNAME isn’t resolving yet:
- Confirm the CNAME you added matches the target from
add_domainexactly. - DNS propagation can take from seconds to a few minutes — give it time.
- If your DNS provider proxies records (a “proxied” / CDN toggle), make sure that matches what the
add_domainresponse told you to set.
See Custom domains for the full flow.
”My balance hit zero — what happens?”
Your VMs archive automatically: hypervisor stopped, billing stops, resources freed, rootfs preserved for 24 hours. Top up and call resume_vm within that window and the VM comes back (same disk; in-memory state is lost — it’s a power cycle). After 24h the rootfs is reclaimed. See Billing FAQ.
”I can’t reach my database / connection refused”
Databases (postgres-18, mysql-8, redis-7) are not exposed publicly by design.
- From another VM in the same project: connect by the database VM’s name (e.g.
db:5432) over the private project network — not over the public internet. - From outside Superjolt: you must
open_portthe database port astcpfirst. (Prefer keeping databases private.) - Different projects are isolated — two VMs can only reach each other privately if they’re in the same project.