Comment définir une limite de temps sur les commandes Linux
Pour les administrateurs système chargés de contrôler les serveurs Linux, la gestion des ressources est une tâche importante à prendre en charge. Parfois, les commandes Linux occupent une énorme partie des ressources système et doivent être arrêtées.
Heureusement, vous pouvez limiter l'exécution de vos commandes à l'aide d'utilitaires tels que timelimit . Dans cet article, nous expliquerons pourquoi vous devez ajouter des limites de temps à vos commandes et comment ajouter une restriction de temps à l'aide de commandes telles que timelimit et timeout.
Pourquoi limiter le temps d'exécution d'une commande?
Il existe plusieurs raisons pour lesquelles vous devrez peut-être exécuter vos commandes avec une limite de temps. Premièrement, vous utilisez peut-être un ordinateur ou un serveur plus ancien et vous ne voulez pas que votre système gaspille ses ressources dans des traitements indésirables.
Deuxièmement, les tâches limitées dans le temps telles que les transferts de fichiers se terminent après une certaine période, mais leurs processus ne s'arrêtent pas immédiatement. Pour empêcher le programme de prendre du temps CPU et de la mémoire supplémentaires, vous pouvez ajouter une limite qui arrêtera le processus une fois le transfert terminé.
Ajouter une limite à l'aide de la commande timeout
La commande timeout est le premier choix de nombreux utilisateurs Linux pour ajouter une restriction de temps à leurs commandes. Étant donné que cet outil fait partie du package GNU Core Utilities , il est préinstallé sur presque toutes les distributions Linux.
La syntaxe de base de la commande timeout est:
timeout limit command
… où limit est la durée pendant laquelle la commande doit s'exécuter et commande est la commande Linux que vous souhaitez exécuter avec une limite de temps.
Par exemple, si vous souhaitez obtenir les détails du processus à l'aide de la commande top pendant 10 secondes:
timeout 10s top
La commande supérieure est sans fin et vous devez la quitter manuellement en utilisant Ctrl + C. La commande susmentionnée s'exécutera en haut pendant 10 secondes et une fois que le minuteur est écoulé, le délai d'expiration arrêtera son exécution. Notez que le délai d'attente prend quelques secondes comme unité de temps par défaut, ce qui signifie que 10 et 10 sont identiques.
Vous pouvez également utiliser m , h et d pour respectivement les minutes , les heures et les jours .
Envoyer manuellement des signaux d'arrêt avec le délai d'expiration
Par défaut, la commande timeout envoie SIGTERM comme signal d'arrêt. SIGTERM signifie Signal Terminate, qui met immédiatement fin au processus.
Vous pouvez également envoyer d'autres signaux en utilisant l'indicateur -s . Par exemple, pour envoyer le signal SIGKILL:
timeout -s SIGKILL 10 top
Il est également possible de spécifier le signal avec son numéro de signal. La commande suivante envoie également le signal SIGKILL à la commande supérieure.
timeout -s 9 10 top
… où 9 est le numéro de signal pour SIGKILL.
Pour obtenir une liste de tous les signaux disponibles:
kill -l
Certaines commandes ne s'arrêtent pas complètement même après l'ajout d'une limite de temps. Dans de telles situations, l'ajout d'un signal d'arrêt avec la commande de délai d'expiration par défaut résout le problème.
timeout -k 15 10 top
La commande susmentionnée exécutera d'abord la commande supérieure pendant 10 secondes, et si la commande ne s'arrête pas, elle enverra un signal d'arrêt au processus après 15 secondes.
Restriction de l'exécution des commandes avec timelimit
Contrairement à la commande timeout, timelimit ne fait pas partie des packages standard préinstallés sur les distributions Linux. Par conséquent, vous devrez installer manuellement timelimit sur votre système.
Pour installer sur des distributions basées sur Debian:
sudo apt install timelimit
Timelimit n'est pas disponible dans les référentiels officiels d'Arch. Mais, vous pouvez l'installer en utilisant un gestionnaire de paquets AUR comme yay .
sudo yay -S timelimit
Pour installer sur Fedora:
sudo dnf install timelimit
Sur RHEL et CentOS:
sudo yum install timelimit
Sinon, si vous ne parvenez toujours pas à installer le package sur votre système, téléchargez le code source sur le site officiel et installez-le manuellement.
Télécharger : timelimit
Pour exécuter la commande supérieure pendant 10 secondes en utilisant timelimit:
timelimit -t10 top
Timelimit prend plusieurs arguments comme warntime , warnsig , killtime et killsig . Si l'utilisateur ne fournit pas ces arguments, leurs valeurs par défaut sont prises, qui sont warntime = 3600 secondes, warnsig = 15 , killtime = 120 et killsig = 9 .
Gérer la vie d'une commande sous Linux
Surveiller les commandes et prendre le contrôle des processus devient important si votre machine Linux dispose de ressources limitées. Des utilitaires tels que timeout et timelimit sont une bouée de sauvetage car ils vous permettent d'ajouter des restrictions de temps à vos commandes.
À l'instar de l'exécution des commandes, vous pouvez également limiter le temps d'écran de votre système. Si vous êtes un parent qui ne veut pas que votre enfant perde du temps inutile devant un ordinateur, limiter le temps d'écran est le choix le plus approprié.