2 votes

Limiteur de temps pour l'exécution de commandes dans un script Bash/Shell

J'ai un script shell qui ressemble à ceci :

echo firstOutput
read -s
command0
command1a
command1b
command1c
echo secondOutput
command2

command1a, command1b, command1c sont des commandes individuelles mais elles peuvent être exécutées dans un ordre arbitraire et forment un groupe au sens de l'explication suivante.

Je veux maintenant l'améliorer pour que le script continue même si une commande reste bloquée. command0 doit être exécuté en premier et il a 8 secondes pour fonctionner. S'il n'y parvient pas dans les 8 secondes, le script doit poursuivre avec command1[a-c] qui ont ensemble 5 secondes pour fonctionner. Si elles ne se terminent pas dans les 5 secondes données, command2 doit être appelé. Au cas où cela serait important : command2 est la dernière commande de ce script.

Édition : Pour clarifier : Je sais comment créer un script qui exécute les commandes dans le temps maximum autorisé. Cependant, ce sont des délais d'attente et je veux que le script s'exécute le plus rapidement possible. Le script entier se termine généralement en une fraction de seconde après que la touche entrée soit pressée (voir la ligne read -s).

3voto

Todd Gamblin Points 101
echo firstOutput
read -s

command0 &
sleep 8

command1a &
command1b &
command1c &
sleep 5

echo secondOutput
command2

0voto

waltinator Points 32821

La commande timeout fait exactement ce que vous semblez vouloir. Voir man timeout:

NOM
   timeout - exécuter une commande avec une limite de temps

SYNOPSIS
   timeout [OPTION] DURÉE COMMANDE [ARG]...
   timeout [OPTION]

DESCRIPTION
   Démarrez la COMMANDE et arrêtez-la si elle est toujours en cours d'exécution après la DURÉE.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X