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é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 queatd
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 oucrontab -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