Quelqu'un peut-il me montrer comment créer un programme pour effectuer cette action: après 5 minutes
echo "80" > /sys/class/leds/blue/brightness
Je veux que ce programme s'exécute en arrière-plan (comme le service rngd
). Je ne peux pas le faire parce que je ne connais pas tellement Linux.
( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
De cette façon, votre script continue, ou vous restaurez immédiatement le contrôle, tandis qu'une nouvelle tâche d'arrière-plan du script démarre, avec deux commandes: sleep et echo.
L'erreur courante essaie de donner sleep
ou echo
ou les deux &
qui ne fonctionnera pas comme prévu. Lancement d'une série de commandes dans ()
mais les génère dans un processus Shell séparé, que vous pouvez ensuite envoyer entier en arrière-plan avec &
.
Pour cet esprit, où je l'ai trouvé activement utile. Dans un appareil intégré 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 de temps après le démarrage, à plusieurs reprises, il est difficile de corriger à distance car la période entre le démarrage du système d'exploitation et la réinitialisation est assez courte, pas suffisante pour se bloquer 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 retard si c'est 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 action, rm /tmp/startdelay
ne sera pas exécuté et au prochain démarrage du système, il me donnera 30 secondes supplémentaires pour l'arrêter. Sinon, le redémarrage sera rapide, sans délai.
utilisez la commande at
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 se poursuive (ou se termine), vous devez également définir le sommeil en arrière-plan:
#!/bin/bash
runWithDelay () {
sleep $1;
shift;
"${@}";
}
runWithDelay 3 echo world &
echo hello
Cela affichera hello
puis 3 secondes plus tard (après la fin du programme principal), imprimera world
.
La partie importante est le &
pour exécuter l'exécution de la fonction en arrière-plan.