# cron



```bash
* * * * * command(s)
^ ^ ^ ^ ^
| | | | |     allowed values
| | | | |     -------
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
```

https://crontab.guru



|          |                      |                                                 |
| -------- | -------------------- | ----------------------------------------------- |
| @yearly  | 0 0 1 1 *            | Tous les 1er janvier à midi                     |
| @monthly | 0 0 1 * *            | Tous les 1er du mois à minuit                   |
| @weekly  | 0 0 * * 0            | Tous les dimanches à minuit                     |
| @daily   | 0 0 * * *            | Tous les jours à minuit                         |
| @hourly  | 0 * * * *            | Toutes les heures                               |
| @reboot  |                      | Au démarrage de l'ordinateur                    |
|          | 0 15 * * 1-5 command | Tous les jours à 15h du lundi au vendredi       |
|          | 00 08-16 * * *       | Toutes les jours, toutes les heures de 8h à 16h |
|          | 0 7 1-7 * 1          | Le 1er lundi de chaque mois à 7h                |
|          | 15 9 1,15 * *        | Le 1er et le 15 du mois à 9h15                  |
|          | */15  * * * *        | Toutes les 15 mn                                |



#### La commande crontab:

- `crontab -e`: édite ou crée le fichier crontab.
- `crontab -l`: affiche le fichier crontab.
- `crontab -r`: supprime le fichier crontab (directement).
- `crontab -i`: supprime le fichier crontab (prompt).
- `crontab -u <user> `: édite le fichier crontab d'un autre utilisateur.

Le fichier crontab s'ouvre dans l'éditeur spécifié par la variable d'environnement EDITOR (ou VISUAL).



https://linuxize.com/post/scheduling-cron-jobs-with-crontab/



#### Voir si le cron est exécuté:

On ouvre la crontab avec `# crontab -e`:

```bash
# On redirige la sortie et les erreurs du scripts vers les logs avec  2>&1 | logger -t up_pihole
# Ici le cron est exécuté toutes les 2 minutes.

*/2 * * * *  bash /root/update_pihole.sh 2>&1 | logger -t up_pihole
```

On cherche les sorties du cron dans les logs:

```bash
# journalctl -f | grep 'up_pihole\|cron'
```

```bash
Aug 25 16:40:01 PiHole1 CRON[438003]: (root) CMD (/usr/bin/env > /root/cron-env)
Aug 25 16:40:01 PiHole1 CRON[438004]: (root) CMD (bash /root/update_pihole.sh 2>&1 | logger -t up_pihole)
Aug 25 16:40:01 PiHole1 CRON[438001]: pam_unix(cron:session): session closed for user root
Aug 25 16:40:02 PiHole1 up_pihole[438007]: Find Pi-hole update on PiHole1
Aug 25 16:40:02 PiHole1 up_pihole[438007]:
Aug 25 16:40:02 PiHole1 up_pihole[438007]:  Pi-hole    Current    Last
Aug 25 16:40:02 PiHole1 up_pihole[438007]:  Pi-hole    v5.18.3    v5.18.3
```

