Si j'exécute un long processus, existe-t-il un moyen d'exécuter des commandes temporelles?
Par exemple, j'exécute un processus très long qui dure environ 10 minutes.
Après 5 minutes, je voudrais exécuter une commande distincte. Par exemple, la commande distincte pourrait être: echo 5 minutes complete
(Remarque: je ne veux pas de progrès vers l'achèvement de la commande, mais simplement des commandes exécutées après des intervalles spécifiés.)
C'est possible?
Exécutez simplement:
long-command & sleep 300; do-this-after-five-minutes
Le do-this-after-five-minutes
s'exécutera après cinq minutes. Le long-command
s'exécutera en arrière-plan.
Vous pouvez utiliser ce script:
#!/bin/bash
TEMPFILE="$(mktemp)"
STARTTIME="$(date +%s)"
(./longprocess; rm -f "$TEMPFILE") &
while [ -f "$TEMPFILE" ]; do
sleep 1s
NOW="$(date +%s)"
if (( (NOW-STARTTIME) % 300 == 0 )); then
echo "$(( (NOW-STARTTIME)/60 )) minute(s) elapsed"
fi
done
echo "Done!!!"
Il exécute votre longprocess
dans un sub-Shell
, puis surveille l'existence du fichier "verrou" créé précédemment.
Il y a une doublure pour cela:
( ( sleep $TIMEOUT ; echo "5 minutes complete") & $COMMAND )
Dans votre cas TIMEOUT = 5m et COMMAND est la commande longue.
Voir également ma réponse à cet article Délai d'attente avec "redémarrage du réseau de service"
#! /bin/bash
( sleep 4 ) & # <-- The long running process.
seconds=1
while jobs %1 &>/dev/null ; do
echo $((seconds++)) seconds complete
sleep 1
done
echo Done.
jobs %1
échoue une fois le travail% 1 arrêté.
Notez que pour des temps plus longs, $ secondes peuvent se désynchroniser avec le temps réel. Il est préférable de stocker l'heure de début et de calculer la différence avec l'heure réelle.