Maison > Article > Opération et maintenance > Comment faire en sorte que Crontab exécute une tâche toutes les secondes
Crontab est un fichier de configuration de planification planifiée sous Linux. Grâce à lui, nous pouvons exécuter des programmes système, des scripts, des commandes et des tâches à des heures définies. ., fonctionnement par intervalles et cycles. La plus petite granularité temporelle dans Crontab est de quelques minutes. En d'autres termes, grâce à la configuration de Crontab, nous pouvons exécuter la tâche cible au maximum une fois par minute. Une exécution plus fréquente n'est pas possible et nous ne pouvons utiliser que d'autres méthodes.
Recommandations d'apprentissage associées : Tutoriel vidéo Linux
Par exemple, que devez-vous faire si vous souhaitez qu'un programme soit exécuté toutes les 30 secondes ?
Il existe encore des solutions de contournement. Une idée est d'ajouter deux configurations dans Crontab, l'une est destinée à la planification normale et est exécutée une fois par minute, et l'autre consiste à attendre 30 secondes avant de s'exécuter.
# Need these to run on 30-sec boundaries, keep commands in sync. * * * * * /path/to/executable param1 param2 * * * * * ( sleep 30 ; /path/to/executable param1 param2 )
Cette méthode semble un peu raide et bizarre, mais elle fonctionne. Cette méthode peut en fait être abrégée en une seule ligne :
* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"
Une autre méthode consiste à utiliser la commande watch :
$ watch --interval .30 script_to_run_every_30_sec.sh
Mais watch est un outil en ligne de commande, nous pouvons utiliser nohup permet de l'exécuter en arrière-plan.
Minuterie SystemDSi le système Linux que nous utilisons possède SystemD, nous pouvons utiliser la minuterie SystemD pour planifier des programmes à tout moment avec une granularité qui peut théoriquement être aussi petite que le niveau de la nanoseconde - bien sûr , C'est un peu fou de faire ça. En bref, sa flexibilité dans la planification des tâches est bien supérieure à celle de Cron - il n'est pas nécessaire d'utiliser des solutions boiteuses commesleep.
Par rapport à crontab qui complète la configuration en une seule ligne, établir un timer SystemD est légèrement plus compliqué, mais afin de mieux implémenter la planification des tâches avec une granularité inférieure à « par minute », cette méthode vaut la peine d'être essayée. Le principe de mise en œuvre du timer SystemD est simplement composé de deux parties : un service système et un timer SystemD. Le minuteur SystemD effectue la planification et les tâches sont écrites en service. Voici un exemple simple. L'objectif est de faire en sorte que l'enregistreur système affiche "Hello World" toutes les dix secondes ;/etc/systemd/system/helloworld.service
[Unit] Description=Say Hello [Service] ExecStart=/usr/bin/logger -i Hello World
/etc/systemd/system/helloworld.timer
[Unit] Description=Say Hello every 10 seconds [Timer] OnBootSec=10 OnUnitActiveSec=10 AccuracySec=1ms [Install] WantedBy=timers.targethelloworld.timer里并没有声明service的名称,那它和service是如何关联的呢?没错,因为它们的名称相同,都是helloworld。Si vous souhaitez que l'ensemble du système utilise cette minuterie, ces deux fichiers doivent être placés dans
/etc/systemd/system. Si vous souhaitez l'utiliser pour un certain utilisateur, placez-le dans ~/.config/systemd/user. Si vous souhaitez que ce minuteur s'exécute immédiatement, vous devez exécuter la commande suivante : La balise –now
danssystemctl enable --now helloworld.timerentraîne l'exécution immédiate du minuteur. Dans le cas contraire, l'opération ne sera déclenchée qu'après le redémarrage du système ou la connexion de l'utilisateur. Les fonctions de chaque champ de la section
[Timer] sont les suivantes :
OnBootSec et OnUnitActiveSec et les remplacer par OnCalendar, comme suit est un exemple :
OnCalendar=*-*-* *:*:00,10,20,30,40,50Enfin, par défaut, le timer et le service SystemD sont associés au même nom. Si vous le souhaitez, vous pouvez également le configurer dans le
[Timer] Pair by. en précisant le champ Unité.
Les méthodes ci-dessus peuvent toutes réaliser des tâches de planification planifiées avec une granularité inférieure à la minute. Chacun a ses avantages. Les minuteries SystemD semblent plus formelles, mais un peu plus complexes. Bien que la méthode Crontab+sleep soit délicate, elle n'est pas incompétente pour certaines petites tâches.
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!