GNU/Linux >> Tutoriels Linux >  >> Linux

Shell :est-il possible de retarder une commande sans utiliser `sleep` ?

Avec bash builtins, vous pouvez faire :

coproc read -t 10 && wait "$!" || true

Dormir 10 secondes sans utiliser sleep . Le coproc est de faire en sorte que read 's stdin est un tuyau d'où rien ne sortira jamais. || true est parce que wait Le statut de sortie de reflétera une livraison SIGALRM qui entraînerait la sortie du shell si le errexit l'option est définie.

Dans d'autres shells :

mksh et ksh93 avoir sleep intégré, inutile d'utiliser quoi que ce soit d'autre là-bas (bien qu'ils prennent également en charge read -t ).

zsh prend également en charge read -t , mais a également un wrapper intégré autour de select() , vous pouvez donc également utiliser :

zmodload zsh/zselect
zselect -t 1000 # centiseconds

Si ce que vous voulez, c'est planifier l'exécution des choses à partir d'une session shell interactive, consultez également le zsh/sched module en zsh .


Vous avez des alternatives à sleep :Ils sont at et cron . Contrairement à sleep ceux-ci nécessitent que vous fournissiez l'heure à laquelle vous en avez besoin pour s'exécuter.

  • Assurez-vous que le atd le service est en cours d'exécution en exécutant service atd status .
    Supposons maintenant que la date soit 11h17 UTC ; si vous devez exécuter une commande à 11h25 UTC, la syntaxe est :echo "This is a test" | at 11:25 .
    Gardez maintenant à l'esprit que atd par défaut ne consignera pas l'achèvement des travaux. Pour plus consulter ce lien. Il est préférable que votre application dispose de sa propre journalisation.

  • Vous pouvez planifier des travaux en cron , pour en savoir plus :man cron pour voir ses options ou crontab -e pour ajouter de nouveaux emplois. /var/log/cron peut être vérifié pour les informations sur l'exécution des travaux.

Pour info sleep system call suspend l'exécution en cours et la planifie w.r.t. l'argument lui est passé.

MODIF :

Comme @Gaius l'a mentionné, vous pouvez également ajouter des minutes à at command.Mais disons que le temps est 12:30:30 et maintenant vous avez exécuté le planificateur avec now +1 minutes . Même si 1 minute, qui se traduit par 60 secondes, a été spécifiée, le at n'attend pas vraiment 12:31:30 pour exécuter le travail, il exécute plutôt le travail à 12:31:00 . Les unités de temps peuvent être minutes, hours, days, or weeks . Pour plus d'informations, reportez-vous au man at

ex :echo "ls" | at now +1 minutes


Quelques autres idées.

top -d10 -n2 >/dev/null

vmstat 10 2 >/dev/null

sar 10 1 >/dev/null

timeout 10s tail -f /dev/null

Linux
  1. [Linux] :Comment exclure un répertoire lors de l'utilisation de la commande shell "tar"

  2. Script bash :utilisation de la commande de script d'un script bash pour la journalisation d'une session

  3. Est-il possible de créer des dossiers de manière récursive à l'aide d'un script shell ?

  4. Comment définir une variable d'environnement dans GDB à l'aide de la commande shell ?

  5. Ajouter un délai aléatoire pour une commande Linux

Comprendre facilement les commandes Shell à l'aide du script "Explain Shell" sous Linux

Comment basculer automatiquement vers un répertoire sans utiliser la commande cd sous Linux

Différentes façons de répertorier le contenu du répertoire sans utiliser la commande ls

Commande Sudo après un long appel de veille sans demander à nouveau le mot de passe Sudo ?

Utilisation de la fonctionnalité d'historique sur Bash Shell sur le serveur Ubuntu 16.04 LTS

Comment puis-je trouver ma version de shell à l'aide d'une commande Linux ?