# Linux commands: crontab

> Learn how the Linux crontab command schedules cron jobs to run at set intervals, listing them with crontab -l and editing them with crontab -e.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2020-10-15 | Topics: [CLI](https://flaviocopes.com/tags/cli/) | Canonical: https://flaviocopes.com/linux-command-crontab/

Cron jobs are jobs that are scheduled to run at specific intervals. You might have a command perform something every hour, or every day, or every 2 weeks. Or on weekends. They are very powerful, especially on servers to perform maintenance and automations.

The `crontab` command is the entry point to work with cron jobs.

The first thing you can do is to explore which cron jobs are defined by you:

```bash
crontab -l
```

You might have none, like me:

![Terminal showing crontab -l command output with no crontab for flavio message](https://flaviocopes.com/images/linux-command-crontab/Screen_Shot_2020-09-09_at_17.54.31.png)

Run

```bash
crontab -e
```

to edit the cron jobs, and add new ones.

By default this opens with the default editor, which is usually `vim`. I like `nano` more, you can use this line to use a different editor:

```bash
EDITOR=nano crontab -e
```

Now you can add one line for each cron job.

The syntax to define cron jobs is kind of scary. This is why I usually use a website to help me generate it without errors: <https://crontab-generator.org/>

I also built my own free [cron expression builder](https://flaviocopes.com/tools/cron-builder/) that explains the schedule in plain English and shows the next run times.

![Crontab Generator website interface showing form to generate cron job syntax with time interval options](https://flaviocopes.com/images/linux-command-crontab/Screen_Shot_2020-09-09_at_18.03.57.png)

You pick a time interval for the cron job, and you type the command to execute.

I chose to run a script located in `/Users/flavio/test.sh` every 12 hours. This is the crontab line I need to run:

```
* */12 * * * /Users/flavio/test.sh >/dev/null 2>&1
```

I run `crontab -e`:

```bash
EDITOR=nano crontab -e
```

and I add that line, then I press `ctrl-X` and press `y` to save.

If all goes well, the cron job is set up:

![Terminal showing successful cron job installation with installing new crontab message](https://flaviocopes.com/images/linux-command-crontab/Screen_Shot_2020-09-09_at_18.06.19.png)

Once this is done, you can see the list of active cron jobs by running:

```bash
crontab -l
```

![Terminal showing crontab -l output displaying active cron job scheduled to run every 12 hours](https://flaviocopes.com/images/linux-command-crontab/Screen_Shot_2020-09-09_at_18.07.00.png)

You can remove a cron job running `crontab -e` again, removing the line and exiting the editor:

![Nano editor showing save confirmation dialog asking whether to save modified crontab file](https://flaviocopes.com/images/linux-command-crontab/Screen_Shot_2020-09-09_at_18.07.40.png)
![Terminal showing crontab installation and empty crontab -l output after removing the cron job](https://flaviocopes.com/images/linux-command-crontab/Screen_Shot_2020-09-09_at_18.07.49.png)

The `crontab` command works on Linux, macOS, WSL, and anywhere you have a UNIX environment
