Docs · Configure
Cron jobs and scheduled calls
Two different things. A cron job runs your own code on a schedule; your app sleeps between runs. A scheduled call has homeport make an HTTP request to any URL on a schedule, with no app running.
Cron jobs
Add one in an environment’s Settings → Cron jobs. Each run starts from your app’s live release, with its code, variables and size, and is stopped at its timeout. It doesn’t wake your app or keep it awake.
| Field | What it is |
|---|---|
| Name | Lowercase letters, digits and dashes, unique in the app. |
| Command | Arguments to your app’s binary, with the same rules as a release command: no shell, so no quotes, && or variables. For Laravel, php-cli artisan reports:send. |
| Schedule | Five cron fields or a macro like @daily, or a preset. As you type, it is described in plain English with its next three runs. |
| Time zone | Any IANA zone, UTC by default. Runs keep wall-clock time across daylight saving changes. |
| Timeout | 10 seconds to an hour. |
| Alerts | Email the team’s owners on the first failure, timeout or missed run, and again when it recovers. |
- An app can have up to 25 jobs. A static site has none. Run now starts one by hand.
- On Free a job runs every 15 minutes at most. On a paid plan, every minute.
- A run that would start more than 2 minutes late, because the app’s previous run is still going, is recorded as missed rather than piling up.
- Each job has a page with its newest 50 runs: status, duration, exit code and output. Its output is in the app’s Logs too.
Laravel’s scheduler
At each deploy, homeport reads your app’s schedule (php-cli artisan schedule:list) and offers its tasks in Settings, to import as jobs at their own times. Your app no longer has to wake every minute for schedule:run. Closures, queued job classes and tasks more often than once a minute can’t become jobs, and Settings says why for each.
What a run costs
A run is billed by the second at the compute rate, $0.015 per GB-hour, for its app’s memory, and 10 seconds at least. The app sleeps between runs, so you pay only while a run is going. A run that never started costs nothing. For example, a 512 MB app’s job that runs for 30 seconds every hour uses about 3 GB-hours a month: $0.05. On Free, runs are never billed; they count toward Free’s compute cap with your app’s own awake time.
Scheduled calls
A scheduled call is an HTTP request homeport makes on a schedule: to wake a webhook, refresh a cache through your API, or ping another service. No app of yours has to run to make it. Calls belong to the team, on its Scheduled calls page.
| Field | What it is |
|---|---|
| Method | GET, POST, PUT, PATCH, DELETE or HEAD. |
| Address | An http or https address, without credentials in it. |
| Headers | Up to 20. Their values are encrypted and never shown again, so a token goes here. |
| Body | Up to 64 KB. |
| Schedule and time zone | As a cron job’s: every 15 minutes at most on Free, every minute on a paid plan. |
| Timeout | 1 to 60 seconds, 30 at most on Free. |
- A 2xx answer is a success. Anything else fails, and says what it answered. Redirects are not followed.
- Calls reach public addresses only, on ports 80, 443, 8080 and 8443: never a private or local network.
- A team can have up to 50 calls. Alerts work as a cron job’s.
What calls cost
| Plan | Included a month | Past that |
|---|---|---|
| Free | 10,000 | They stop until the month ends |
| Starter | 100,000 | $0.01 per 1,000 |
| Growth | 1,000,000 | $0.01 per 1,000 |
| Business | 10,000,000 | $0.01 per 1,000 |
Calls are billed per call. Every call made counts, whatever it answered; a missed call doesn’t. For example, a call to https://yourapp.com/api/refresh every 5 minutes is about 8,800 calls a month, inside even Free’s 10,000.