GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exécuter une commande en arrière-plan avec un délai ?

( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &

De cette façon, votre script continue, ou vous reprenez le contrôle immédiatement, tandis qu'une nouvelle tâche en arrière-plan du script démarre, avec deux commandes :sleep et echo.

L'erreur courante est d'essayer de donner soit sleep ou echo ou les deux le & qui ne fonctionnera pas comme prévu. Lancement d'une suite de commandes en () mais les génère dans un processus shell séparé, que vous pouvez ensuite envoyer en arrière-plan avec & .

À cet esprit, où je l'ai trouvé activement utile. Dans un appareil embarqué que je développe, il y a l'application principale qui fonctionne avec un chien de garde. S'il échoue d'une manière qui déclenche la réinitialisation du chien de garde peu après le démarrage, à plusieurs reprises, il est difficile de réparer à distance car la période entre le démarrage du système d'exploitation et la réinitialisation est assez courte, pas assez pour ssh et bloquer le démarrage de l'application. J'ai donc besoin d'un moyen de déterminer si le système a redémarré si rapidement et d'introduire un délai si c'était le cas, pour me donner le temps de le réparer manuellement.

 [ -f /tmp/startdelay ] && sleep 30
 touch /tmp/startdelay
 ( sleep 30 ; rm /tmp/startdelay ) &
 [ -f /tmp/noautostart ] && exit 0
 start_app

Si je me connecte et que j'exécute touch /tmp/noautostart l'application principale ne démarre pas. Si le chien de garde entre en jeu, rm /tmp/startdelay ne sera pas exécuté et la prochaine fois que le système démarrera, cela me donnera 30 secondes supplémentaires pour l'arrêter. Sinon, le redémarrage sera rapide, sans délai.


utilisez le at commande

echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min

qui s'exécutera en arrière-plan


Si vous voulez que quelque chose s'exécute en 5 minutes, mais que le reste de votre programme continue (ou se termine), vous devez également mettre en arrière-plan le sommeil :

#!/bin/bash

runWithDelay () {
    sleep $1;
    shift;
    "${@}";
}

runWithDelay 3 echo world &
echo hello    

Cela imprimera hello puis 3 secondes plus tard (après la sortie du programme principal), imprimez world .

La partie importante est le & pour bifurquer l'exécution de la fonction en arrière-plan.


Linux
  1. Comment auditer les autorisations avec la commande find

  2. Comment exécuter une commande en tant qu'administrateur système (racine) ?

  3. Comment envoyer des applications de ligne de commande directement en arrière-plan ?

  4. Comment puis-je exécuter une commande différente mais avec les mêmes arguments ?

  5. Comment combiner la commande 'tar' avec 'find'

Comment exécuter des commandes Linux en arrière-plan

Comment utiliser la commande RPM (avec exemples)

Comment changer la couleur de sortie de 'Echo' sous Linux

Comment rechercher des fichiers avec la commande fd sous Linux

Exécutez des processus d'arrière-plan sous Linux à l'aide de la commande Screen

Comment utiliser la commande Sleep sous Linux :expliqué avec des exemples