Maison  >  Article  >  Opération et maintenance  >  Qu'est-ce que la commande Crontab de la tâche planifiée de contrôle utilisateur Linux et son explication détaillée

Qu'est-ce que la commande Crontab de la tâche planifiée de contrôle utilisateur Linux et son explication détaillée

伊谢尔伦
伊谢尔伦original
2017-05-30 14:56:082062parcourir

Le système Linux est contrôlé par le service système cron (crond). Il existe de nombreuses tâches planifiées sur le système Linux, ce service système est donc démarré par défaut. De plus, étant donné que les utilisateurs peuvent également définir eux-mêmes des tâches planifiées, le système Linux fournit également la commande permettant aux utilisateurs de contrôler les tâches planifiées : la commande crontab.

1. Introduction à crond

crond est un processus démon utilisé sous Linux pour effectuer périodiquement certaines tâches ou attendre le traitement de certains événements. Il est similaire aux tâches planifiées sous Windows une fois installé. le système d'exploitation, cet outil de service sera installé par défaut et le processus crond sera automatiquement démarré. Le processus crond vérifiera régulièrement s'il y a des tâches à exécuter chaque minute. S'il y a des tâches à exécuter, la tâche sera. automatiquement exécuté.

La planification des tâches sous Linux est divisée en deux catégories, la planification des tâches système et la planification des tâches utilisateur.

Planification des tâches système : travail que le système effectue périodiquement, comme l'écriture de données mises en cache sur le disque dur, le nettoyage des journaux, etc. Il existe un fichier crontab dans le répertoire /etc, qui est le fichier de configuration pour la planification des tâches système. Le fichier

/etc/crontab comprend les lignes suivantes :

cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin : /bin:/usr/sbin:/usr/bin

MAILTO=HOME=/

# run-parts

51 * * * * racine run-parts /etc /cron.hourly

24 7 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly


Les quatre premières lignes sont utilisées pour configurer les variables d'environnement pour l'exécution de la tâche crond. La première ligne de la variable SHELL spécifie la. système à utiliser Quel shell, voici bash, la variable PATH dans la deuxième ligne spécifie le chemin du système pour exécuter la commande et la variable MAILTO dans la troisième ligne spécifie les informations d'exécution de la tâche crond qui seront envoyées à l'utilisateur root par e-mail. Si la valeur de la variable MAILTO est vide, alors indique que les informations d'exécution de tâche ne sont pas envoyées à l'utilisateur. La variable HOME dans la quatrième ligne spécifie le répertoire personnel utilisé lors de l'exécution de commandes ou de scripts. Les significations représentées par les lignes six à neuf seront décrites en détail dans la section suivante. Pas grand chose à dire ici.

Planification des tâches utilisateur : tâches que les utilisateurs doivent effectuer régulièrement, telles que la sauvegarde des données utilisateur, les rappels réguliers par e-mail, etc. Les utilisateurs peuvent utiliser l'outil crontab pour personnaliser leurs propres tâches planifiées. Tous les fichiers crontab définis par l'utilisateur sont enregistrés dans le répertoire /var/spool/cron. Son nom de fichier est cohérent avec le nom d'utilisateur.

Fichier d'autorisations utilisateur :

Fichier :

/etc/cron.deny

Description :

Répertoriés dans ce fichier Les utilisateurs sont non autorisé à utiliser la commande crontab

Fichier :

/etc/cron.allow

Description :

Les utilisateurs répertoriés dans ce fichier sont autorisés à utilisez la commande crontab

Fichier :

/var/spool/cron/

Description :

Le répertoire où sont stockés tous les fichiers crontab utilisateur, nommé après le nom de l'utilisateur

Signification du fichier crontab :

Dans le fichier crontab créé par l'utilisateur, chaque ligne représente une tâche, et chaque champ de chaque ligne représente un paramètre. Son format est divisé. en six champs. , les cinq premiers segments sont des segments de réglage de l'heure et le sixième segment est le segment de commande à exécuter. Le format est le suivant :

minute heure jour mois semaine commande

. où :

minute : représente la minute, qui peut être n'importe quel nombre entier compris entre 0 et 59.

heure : représente l'heure, qui peut être n'importe quel nombre entier compris entre 0 et 23.

jour : représente la date, qui peut être n'importe quel nombre entier compris entre 1 et 31.

mois : représente le mois, qui peut être n'importe quel nombre entier compris entre 1 et 12.

semaine : indique le jour de la semaine, qui peut être n'importe quel nombre entier compris entre 0 et 7, où 0 ou 7 représente le dimanche.

commande : La commande à exécuter peut être une commande système ou un fichier script écrit par vous-même.

Dans chacun des champs ci-dessus, vous pouvez également utiliser les caractères spéciaux suivants :

Astérisque (*) : représente toutes les valeurs possibles, par exemple, si le mois Le champ est un astérisque, cela signifie que l'opération de commande sera exécutée chaque mois une fois les contraintes des autres champs remplies.

Comma (,) : vous pouvez spécifier une plage de liste avec des valeurs séparées par des virgules, par exemple, "1,2,5,7,8,9"

Barre du milieu (-) : Vous pouvez utiliser un tiret entre des nombres entiers pour représenter une plage de nombres entiers, par exemple, "2-6" signifie "2,3,4,5,6"

Barre oblique (/) : vous pouvez utiliser un barre oblique pour spécifier la fréquence de l'intervalle de temps, par exemple "0-23/2" signifie une exécution toutes les deux heures. Dans le même temps, des barres obliques peuvent être utilisées avec des astérisques, tels que */10. Si elles sont utilisées dans le champ des minutes, cela signifie qu'elles seront exécutées toutes les dix minutes.

2. Service Crond

Installer crontab :

yum install crontabs

Instructions d'utilisation du service :

/sbin/service crond start //Démarrer le service

/sbin/service crond stop //Fermer le service

/sbin/service crond restart //Redémarrer le service

/sbin/service crond reload // Recharger la configuration

/sbin/service crond status //Démarrer le service


Vérifiez si le service crontab a été configuré pour démarrer au démarrage, exécutez la commande :

ntsysv

Ajouter le démarrage automatique au démarrage :

chkconfig –level 35 crond on

3. Explication détaillée de la commande crontab

1. Format de commande :

crontab [-u utilisateur] fichier

crontab [-u utilisateur] [ -e | -l | Fonction de commande :

Grâce à la commande crontab, nous pouvons exécuter des commandes système spécifiées ou des scripts shell à intervalles fixes. L'unité d'intervalle de temps peut être des minutes, des heures, des jours, des mois, des semaines ou toute combinaison de ces éléments. Cette commande est très adaptée à l'analyse périodique des journaux ou à la sauvegarde des données et à d'autres tâches.

3. Paramètres de commande :

-u user : utilisé pour définir le service crontab d'un certain utilisateur. Par exemple, "-u ixdba" signifie définir le service crontab de l'utilisateur ixdba. Ce paramètre est généralement exécuté par le root. utilisateur.

file : file est le nom du fichier de commandes, ce qui signifie que file est utilisé comme fichier de liste de tâches de crontab et chargé dans crontab. Si ce fichier n'est pas spécifié sur la ligne de commande, la commande crontab acceptera les commandes saisies sur l'entrée standard (clavier) et les chargera dans crontab.

-e : modifie le contenu du fichier crontab d'un utilisateur. Si aucun utilisateur n'est spécifié, cela signifie éditer le fichier crontab de l'utilisateur actuel.

-l : Afficher le contenu du fichier crontab d'un certain utilisateur. Si aucun utilisateur n'est spécifié, cela signifie afficher le contenu du fichier crontab de l'utilisateur actuel.

-r : Supprimer le fichier crontab d'un utilisateur du répertoire /var/spool/cron Si aucun utilisateur n'est spécifié, le fichier crontab de l'utilisateur actuel sera supprimé par défaut.

-i : donne une invite de confirmation lors de la suppression du fichier crontab de l'utilisateur.

4. Méthodes couramment utilisées :

1). Créer un nouveau fichier crontab

Avant d'envisager de soumettre un fichier crontab au processus cron, la première chose à faire est de définir la variable d'environnement EDITOR. Le processus cron l'utilise pour déterminer quel éditeur utiliser pour modifier le fichier crontab. 99 % des utilisateurs UNIX et LINUX utilisent vi. Si vous faites de même, éditez le fichier de profil . dans le répertoire $HOME et ajoutez-y cette ligne :

EDITOR=vi; 🎜>Ensuite, enregistrez et quittez. Pensez à créer un fichier nommé cron, où est le nom d'utilisateur, par exemple, davecron. Ajoutez le contenu suivant à ce fichier.

# (mettez vos propres initiales ici)répétez la date sur la console toutes les

# 15minutes entre 18h et 6h

0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console

Enregistrez et quittez. Assurez-vous que les 5 premiers champs sont séparés par des espaces.

Dans l'exemple ci-dessus, le système affichera l'heure actuelle sur la console toutes les 15 minutes. Si le système plante ou se bloque, la dernière heure affichée vous indiquera en un coup d'œil quand le système a cessé de fonctionner. Dans certains systèmes, tty1 est utilisé pour représenter la console, et l'exemple ci-dessus peut être modifié en conséquence en fonction de la situation réelle. Afin de soumettre le fichier crontab que vous venez de créer, vous pouvez passer ce fichier nouvellement créé en argument à la commande cron :

$ crontab davecron

Maintenant que le fichier a été soumis au processus cron, il s'exécutera toutes les 15 minutes.

En même temps, une copie du fichier nouvellement créé a été placée dans le répertoire /var/spool/cron, et le nom du fichier est le nom d'utilisateur (c'est-à-dire Dave).

2). Lister les fichiers crontab

Pour lister les fichiers crontab, vous pouvez utiliser :

$ crontab -l

0,15,30, 45 ,18-06 * * * /bin/echo `date` > dev/tty1

Vous verrez un contenu similaire à celui ci-dessus. Vous pouvez utiliser cette méthode pour faire une sauvegarde du fichier crontab dans le répertoire $H O M E :

$ crontab -l > $HOME/mycron

De cette façon, si vous supprimez accidentellement le fichier crontab, vous pouvez récupérer rapidement en utilisant la méthode décrite dans la section précédente.

3). Modifier le fichier crontab

Si vous souhaitez ajouter, supprimer ou modifier des entrées dans le fichier crontab et que la variable d'environnement E D I TO R est définie sur vi, vous pouvez utiliser vi pour éditez le fichier crontab, la commande correspondante est :

$ crontab -e

Vous pouvez modifier le fichier crontab et quitter comme si vous utilisiez vi pour éditer n'importe quel autre fichier. Si certaines entrées sont modifiées ou si de nouvelles entrées sont ajoutées, cron effectuera les vérifications d'intégrité nécessaires sur le fichier lors de son enregistrement. Si l'un des champs a une valeur en dehors de la plage autorisée, il vous le demandera.

Lorsque nous modifions le fichier crontab, nous pouvons ajouter de nouvelles entrées. Par exemple, ajoutez ce qui suit :

# DT : supprimer les fichiers principaux, à 3h30 du matin les 1,7,14,21,26,26 jours de chaque mois

30 3 1,7 ,14,21,26 * * /bin/find -name « core' -exec rm {} ;

Maintenant, enregistrez et quittez. Il est préférable d'ajouter un commentaire au-dessus de chaque entrée dans le fichier crontab, comme. ceci Vous pouvez connaître sa fonction, sa durée d'exécution et, plus important encore, de quel utilisateur il s'agit

Utilisons maintenant la commande crontab -l mentionnée précédemment pour lister toutes ses informations :

$. crontab -l

# (crontab installé le mardi 4 mai 13:07:43 1999)

# DT:ech la date à la console toutes les 30 minutes

0, 15,30,45 18-06 * * * /bin/echo `date` > /dev/tty1

# DT : supprimer les fichiers core, à 3h30 le 1, 7,14,21,26 ,26 jours de chaque mois

30 3 1,7,14,21,26 * * /bin/find -name « core' -exec rm {} ;

4). fichier crontab

Pour supprimer le fichier crontab, vous pouvez utiliser :

$ crontab -r

5).

Si vous supprimez accidentellement le fichier crontab, en supposant que vous ayez toujours une sauvegarde dans votre répertoire $H O M E, vous pouvez le copier dans /var/spool/cron/, où Si la copie ne peut pas être terminée en raison de problèmes d'autorisation, vous pouvez utiliser :

$ crontab

est le nom du fichier que vous avez copié dans le $. Annuaire H O M E .

Je vous recommande de sauvegarder une copie de ce fichier dans votre répertoire $H O M E. J'ai eu une expérience similaire et j'ai supprimé plusieurs fois des fichiers crontab par erreur (car la touche r est immédiatement à droite de la touche e). C'est pourquoi certaines documentations système recommandent de ne pas modifier directement le fichier crontab, mais d'éditer une copie du fichier puis de soumettre à nouveau le nouveau fichier.

Certaines variantes de crontab sont un peu bizarres, alors soyez prudent lorsque vous utilisez la commande crontab. Si des options sont omises, crontab peut ouvrir un fichier vide ou apparaître comme un fichier vide. À ce stade, appuyez sur la touche Suppr pour quitter. N'appuyez pas sur , sinon vous perdrez le fichier crontab.

5. Exemple d'utilisation

Instance 1 : Exécuter la commande
commande toutes les 1 minute :
* * * * * commande

Instance 2 : Le 3ème et le 3ème toutes les heures Exécuter le
commande en 15 minutes :
commande 3,15 * * * *

Exemple 3 : Exécuter la commande
à la 3ème et 15ème minutes de 8h à 11h :
Commande 3,15 8-11* * *

Exemple 4 : Exécuter la commande
à la 3ème et 15ème minutes de 8h à 11h tous les deux jours :
3,15 8-11 */2* *commande

Exemple 5 : Exécuter la commande
à la 3ème et 15ème minutes de 8h à 11h tous les lundis :
3, 15 8-11 * * 1 commande

Instance 6 : Redémarrer smb à 21h30 tous les soirs
Commande :
30 21 * * * /etc/ init.d/smb restart


Instance 7 : Redémarrer smb à 4h45 les 1er, 10 et 22 de chaque mois
Commande :
45 4 1,10,22 * * / etc/init .d/smb restart


Instance 8 : Redémarrer smb à 1h10 tous les samedis et dimanches
Commande :
10 1 * * 6,0 /etc/ init.d/smb restart


Instance 9 : Redémarrer smb toutes les 30 minutes entre 18h00 et 23h00 tous les jours
Commande :
0,30 18-23 * * * /etc/init. d/smb restart


Instance 10 : Redémarrez smb tous les samedis à 23h00
Commande :
0 23 * * 6 /etc/smb restart


Instance 11 : Redémarrer smb toutes les heures
Commande :
* */1 * * * /etc/init.d/smb restart


Instance 12 : Redémarrer smb toutes les heures entre 23h et 7h
Commande :
* 23-7/1 * * * /etc/init.d/smb restart

Instance 13 : Redémarrer smb le 4 de chaque mois et chaque lundi au mercredi à 11h
Commande :
0 11 4 * mon-wed /etc/init.d/smb restart

Instance 14 : Redémarrer smb à 4h le 1er janvier
Commande :
0 4 1 jan * /etc/init.d/smb restart


Exemple 15 : Exécuter le script dans le /etc /cron.hourly toutes les heures
Commande :
01 * * * * * root run-parts /etc/cron.hourly
Instructions :
paramètre run -parts Si vous supprimez ce paramètre, vous pourrez écrire plus tard le nom d'un script à exécuter à la place du nom du répertoire


4. Précautions d'utilisation

Note Problème de variable d'environnement
Parfois on crée une crontab, mais la tâche ne peut pas être exécutée automatiquement, mais il n'y a aucun problème lors de l'exécution manuelle de la tâche. Cette situation est généralement due au fait que la variable d'environnement n'est pas configurée dans le fichier crontab.

Lors de la définition de plusieurs tâches de planification dans un fichier crontab, un problème qui nécessite une attention particulière est la configuration des variables d'environnement, car lorsque nous exécutons manuellement une tâche, elle est effectuée dans l'environnement shell actuel. Le programme peut trouver les variables d'environnement. Lorsque le système effectue automatiquement la planification des tâches, il ne chargera aucune variable d'environnement. Par conséquent, vous devez spécifier toutes les variables d'environnement requises pour l'exécution de la tâche dans le fichier crontab. problème lorsque le système effectue la planification des tâches.

Ne présumez pas que cron connaît l’environnement spécial requis, ce n’est pas le cas. Vous devez donc vous assurer de fournir tous les chemins et variables d'environnement nécessaires dans le script shelll, à l'exception de certaines variables globales définies automatiquement. Faites donc attention aux 3 points suivants :

1) Lorsque le chemin du fichier est impliqué dans le script, écrivez le chemin global

2) Lorsque l'exécution du script nécessite Java ou d'autres variables d'environnement ; , introduisez les variables d'environnement via la commande source , telles que :

cat start_cbp.sh

#!/bin/sh

source /etc/profile

export RUN_CONF=/home/d139/ conf/platform/cbp/cbp_jboss.conf

/usr/local/jboss-4.0.5/bin/run.sh -c mev &

3) Lors de l'exécution manuelle du script, tout va bien, mais lorsque crontab n'est pas exécuté. À ce stade, vous devez hardiment soupçonner que les variables d'environnement sont à blâmer, et vous pouvez essayer d'introduire directement des variables d'environnement dans crontab pour résoudre le problème. Par exemple :

0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

Faites attention à vider le système journal de messagerie de l'utilisateur
Une fois l'exécution de chaque tâche programmée, le système enverra les informations de sortie de tâche à l'utilisateur actuel du système par e-mail. Au fil du temps, les informations du journal seront très volumineuses et peuvent affecter le fonctionnement normal du système. Par conséquent, chaque tâche sera très importante pour gérer les redirections.

Par exemple, vous pouvez définir le formulaire suivant dans le fichier crontab pour ignorer la sortie du journal :

0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

«/dev/null 2>&1» signifie d'abord rediriger la sortie standard vers /dev/null, puis redirigez l'erreur standard vers la sortie standard. Puisque la sortie standard a été redirigée vers /dev/null, l'erreur standard sera également redirigée vers /dev/null, le problème de sortie du journal est donc résolu.

Planification des tâches au niveau du système et planification des tâches au niveau de l'utilisateur
La planification des tâches au niveau du système complète principalement certaines opérations de maintenance du système, et la planification des tâches au niveau de l'utilisateur complète principalement certaines tâches définies par l'utilisateur. la planification des tâches au niveau peut être placée Accédez à la planification des tâches au niveau du système pour terminer (ce n'est pas recommandé), mais l'inverse n'est pas possible. L'opération de planification des tâches de l'utilisateur root peut être définie via "crontab –uroot –e", ou planifiée. La tâche peut être écrite directement dans le fichier /etc/crontab, il convient de noter que si vous souhaitez définir une tâche pour redémarrer le système régulièrement, vous devez mettre la tâche dans le fichier /etc/crontab même si vous créez une tâche pour. redémarrez régulièrement le système sous l'utilisateur root, il ne sera pas valide.

Autres notes
La tâche cron nouvellement créée ne sera pas exécutée immédiatement, son exécution prendra au moins 2 minutes. Si cron est redémarré, il sera exécuté immédiatement.

Lorsque crontab échoue soudainement, vous pouvez essayer /etc/init.d/crond restart pour résoudre le problème. Ou consultez le journal pour voir si un travail a été exécuté/a signalé une erreur tail -f /var/log/cron.

Ne lancez jamais crontab -r au hasard. Il supprime les fichiers Crontab de l'utilisateur du répertoire Crontab (/var/spool/cron). Toutes les crontabs de cet utilisateur ont disparu après la suppression.

% a une signification particulière dans crontab, qui signifie saut de ligne. Si vous souhaitez l'utiliser, vous devez échapper %. Par exemple, la date fréquemment utilisée '+%Y%m%d' ne sera pas exécutée dans crontab et doit être remplacée par la date '+%Y%m%d'.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn