les services cron

Commandes cron
sudo service cron restart redémarrer le service cron
crontab -l permet de lister toutes les actions crontab de votre utilisateur
crontab -u toto -l permet à l'administrateur de lister toutes les actions crontab de l'utilisateur toto
crontab -r permet de supprimer votre fichier crontab
crontab -e permet d'éditer votre fichier crontab. Cela ouvrira l'éditeur de texte standard vi. Tout bon administrateur connait évidement cet outil indispensable, sinon consulter : Utilisation de vi.





dossiers de cron
/etc/crond.daily/ exécution quotidienne (chaque jour à 04h02)
/etc/crond.hourly/ exécution chaque heure (chaque heure + 1 minute)
/etc/crond.weekly/exécution hebdomadaire (le dimanche à 04h22)
/etc/crond.monthly/ exécution mensuelle (le 1er du mois à 04h42)
cron.allow si existe, seuls les utilisateurs figurant dans ce fichier peuvent créer, modifier, afficher ou supprimer des fichiers crontab. on peut ajouter root
cron.deny Aucun des noms d'utilisateur du fichier cron.deny par défaut ne peut accéder à la commande crontab.
ni cron.allow ni cron.deny si les deux n'existent, les privilèges de superutilisateur sont requis pour exécuter la commande crontab .





syntaxe générale
La syntaxe générale de cron est en OU, l'outil par default est /bin/sh. cron interprète le % il faut donc l'échapper dans les commandes
mm hh jj MMM JJJ tâche
représente les minutes (de 0 à 59) représente l'heure (de 0 à 23) représente le numéro du jour du mois (de 1 à 31) représente l'abréviation du nom du mois (jan, feb, ...) ou bien le numéro du mois (de 1 à 12) représente l'abréviation du nom du jour ou bien le numéro du jour dans la semaine : 0 = dimanche 1=lundi [...] 7=dimanche 0 0 13 * 5 tâche
* à chaque unité (0, 1, 2, 3, 4…)
5,8 les unités 5 et 8
2-5 les unités de 2 à 5 (2, 3, 4, 5)
*/3 toutes les 3 unités (0, 3, 6, 9…)
10-20/3 toutes les 3 unités, entre la dixième et la vingtième (10, 13, 16, 19)





quelques racourcis
Raccourcis tips Description Équivalent
@rebootAu démarrage Aucun
@yearlyTous les ans 0 0 1 1 *
@annually Tous les ans 0 0 1 1 *
@monthlyTous les mois 0 0 1 * *
@weeklyToutes les semaines 0 0 * * 0
@dailyTous les jours 0 0 * * *
@midnight Toutes les nuits 0 0 * * *
@hourlyToutes les heures 0 * * * *





quelques exemples de dâtes
Tous les jours à 23 h 30 : 30 23 * * * df >> /tmp/df.log
Toutes les heures, passées de 5 minutes : 5 * * * * df >> /tmp/df.log
Tous les premiers du mois à 23 h 30 : 30 23 1 * * df >> /tmp/df.log
Tous les lundis à 22 h 28 : 28 22 * * 1 df >> /tmp/df.log
Tous les vendredis et tous les 13 de n'importe quel mois à 11 h 22 : 22 11 13 * 5 df >> /tmp/df.log
Tous les vendredis 13 de n'importe quel mois à 11 h 22 : 22 11 13 * * [ `date '+\%w'` -eq 5 ] && df >> /tmp/df.log
Du 2 au 5 de chaque mois à 10 h 12 : 12 10 2-5 * * df >> /tmp/df.log
Tous les jours pairs du mois à 23 h 59 : 59 23 */2 * * df >> /tmp/df.log
Tous les jours ouvrés à 22 heures : 0 22 * * 1-5 df >> /tmp/df.log
Toutes les 5 minutes : */5 * * * * df >> /tmp/df.log
Tous les derniers jours du mois (la barre oblique inversée devant % est obligatoire en édition de crontab, contrairement à l'exécution manuelle de la commande) : 0 0 28-31 * * [ `/bin/date +\%d` -gt `/bin/date +\%d -d "1 day"` ] && df >> /tmp/df.log
Tous les derniers dimanches du mois :
Première solution : comparer tous les dimanches avec celui de la semaine d'après.
0 0 * * 0 [ `/bin/date +\%d` -gt `/bin/date +\%d -d "7 day"` ] && df >> /tmp/df.log
Tous les derniers dimanches du mois :
Deuxième solution : tester la dernière semaine tous les mois.
0 0 25-31 1,3,5,7,8,10,12 0 my-script.sh
0 0 24-30 4,6,9,11 0 my-script.sh
0 0 22-29 2 0 my-script.sh
quelques exemples de commandes
on force /bin/bash et on filtre la sortie, cron envoie des mails sauf quand l'erreur contient "Warningz: Local version"30 13 * * 1-5 root /bin/bash -c '/usr/local/sbin/sauvegarde.sh 2> >(grep -v "Warning: Local version")'
on filtre la sortie d'erreur mais on continue à rediriger la sortie standard dans un fichier35 13 * * 1-5 root /bin/bash -c '/usr/local/sbin/supression_sauvegarde.sh 2> >(grep -v "Warningz: Local version") 1>> /var/log/sauvegarde.log'
on redirige tout à la fin d'un fichier30 03 01 Jan,Apr,Jul,Oct * root /bin/bash -c 'certbot renew --cert-name mon_super_site.fr --dry-run 2>&1>> /var/log/certificats.log'





at
commande at
at permet d'executer une commande dans l'avenir at 14:17 11/15/10
at 14:17
at> [...]
spécificateur de temps
minutes at now +5 minutes
hours(heures) at now +5 hours
days(jours) at now +5 >days
weeks(semaines) at now +5 >days
months(mois) at now +5 >days
years(années) at now +1 years
atq lister les jobs
atrm 13 supprimer le job 13
droit sur at
at.allow si existe, seuls les utilisateurs figurant dans ce fichier peuvent créer, modifier, afficher ou supprimer des fichiers crontab. on peut ajouter root
at.deny Aucun des noms d'utilisateur du fichier at.deny par défaut ne peut accéder à la commande crontab.
fichiers at
/usr/share/doc/at/timespec
/var/spool/cron/atjobs Le répertoire de stockage des travaux; ce devrait être mode 700, démon propriétaire
/var/spool/cron/atspool contient la liste des processus en attentes
/proc/loadavg
/var/run/utmp
/etc/at.allow
/etc/at.deny