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
atdle service est en cours d'exécution en exécutantservice 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 queatdpar 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 cronpour voir ses options oucrontab -epour ajouter de nouveaux emplois./var/log/cronpeut ê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