Comment faire exécuter le script bash avec une latence (c'est-à-dire attendre 1 seconde à chaque itération)?


28

J'ai ce script bash;

for (( i = 1 ; i <= 160 ; i++ )); do
  qsub myccomputations"${i}".pbs
done

Fondamentalement, je préférerais qu'il y ait un délai d'une seconde entre chaque itération. La raison en est qu'à chaque itération, il envoie le fichier programme mycomputation"${i}$.pbsà un nœud principal pour résolution. La motivation est que la résolution dans ce cas implique l'utilisation de nombres pseudo-aléatoires et que le RNG que j'utilise (R) utilise le temps CPU comme graine.

Alors, comment demander à bash

for (( i = 1 ; i <= 160 ; i++ )); do
  wait 1 sec    
  qsub myccomputations"${i}".pbs
done

Réponses:


54

Utilisez simplement sleep 1dans Bash.

for (( i = 1 ; i <= 160 ; i++ )); do
  sleep 1
  qsub myccomputations"${i}".pbs
done

vous pouvez utiliser un nombre à virgule flottante si vous souhaitez dormir moins de 1 seconde
shellholic

0

Si vous voulez réaliser ce que votre sujet suggère, vous devez utiliser «at».

Voir

      man at

pour plus d'informations.


1
merci Olli. En effet, je vais réécrire le titre, donc il correspond à la question, pour les futures requêtes.
user2413

atne suspendra pas une boucle pendant une durée spécifique, mais définira un programme / script à exécuter à un moment précis.
Soren A
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.