# Set up cron jobs

Cron jobs allow you to run scheduled tasks at specified times or intervals.

While you can run your own custom tasks, Laravel provides a scheduler to simplify the implementation.
To implement it, see the Laravel [Task Scheduling documentation](https://laravel.com/docs/master/scheduling).

## Set up a cron job

To set up a cron job, update your Upsun configuration as follows:

```yaml  {location=".upsun/config.yaml"}
applications:
  myapp:
    [...]
    crons:
      snapshot:
        spec: * * * * *
        commands:
          start: |
            php artisan schedule:run >> /dev/null 2>&1
```

## Run cron jobs based on environment type

To run a command in a cron hook for specific environment types,
use the `PLATFORM_ENVIRONMENT_TYPE` environment variable:

```yaml  {location=".upsun/config.yaml"}
applications:
  myapp:
    [...]
    crons:
      snapshot:
        spec: 0 5 * * *
        commands:
          start: |
            # only run for the production environment, aka main branch
            if [ "$PLATFORM_ENVIRONMENT_TYPE" = "production" ]; then
              php artisan schedule:run >> /dev/null 2>&1
            fi
```

## Run the Laravel scheduler every minute

Cron job execution on the default Upsun offering are limited to once every 5 minutes.
For more information, see the [documentation on crons](https://docs.upsun.com/create-apps/image-properties/crons.md).

However, you can add a [worker](https://docs.upsun.com/create-apps/image-properties/workers.md)
and specify a start command that [runs the scheduler every minute](https://laravel.com/docs/11.x/scheduling#running-the-scheduler-locally).
To do so, use the following configuration:

```yaml  {location=".upsun/config.yaml"}
applications:
  <APP_NAME>:
    [...]
    workers:
      scheduler:
        commands:
          start: |
            php artisan schedule:work
```

**Warning**: 

Web and worker containers don’t share mount targets.
You can’t share files between those containers using the filesystem.
To share data between containers, use [services](https://docs.upsun.com/add-services.md).


