GNU/Linux >> Linux Esercitazione >  >> Linux

Shell:è possibile ritardare un comando senza usare `sleep`?

Con bash builtins, puoi fare:

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

Dormire per 10 secondi senza usare sleep . Il coproc è fare in modo che read Lo stdin di è un tubo da cui non uscirà mai nulla. || true è perché wait lo stato di uscita di rifletterà una consegna SIGALRM che causerebbe l'uscita della shell se errexit l'opzione è impostata.

In altre shell:

mksh e ksh93 avere sleep built-in, non ha senso usare qualcos'altro lì (sebbene entrambi supportino anche read -t ).

zsh supporta anche read -t , ma ha anche un wrapper integrato attorno a select() , quindi puoi usare anche:

zmodload zsh/zselect
zselect -t 1000 # centiseconds

Se quello che vuoi è pianificare le cose da eseguire da una sessione di shell interattiva, vedi anche zsh/sched modulo in zsh .


Hai delle alternative a sleep :Sono at e cron . Contrariamente a sleep questi hanno bisogno che tu fornisca l'ora in cui hai bisogno che vengano eseguiti.

  • Assicurati che il atd il servizio è in esecuzione eseguendo service atd status .
    Ora diciamo che la data è 11:17 UTC; se devi eseguire un comando alle 11:25 UTC, la sintassi è:echo "This is a test" | at 11:25 .
    Ora tieni presente che atd per impostazione predefinita non registrerà il completamento dei lavori. Per ulteriori informazioni, fare riferimento a questo collegamento. È meglio che la tua applicazione abbia la propria registrazione.

  • Puoi programmare i lavori in cron , per ulteriori informazioni fare riferimento a:man cron per vedere le sue opzioni o crontab -e per aggiungere nuovi posti di lavoro. /var/log/cron può essere controllato per le informazioni sull'esecuzione dei lavori.

Cordiali saluti sleep system call sospende l'esecuzione in corso e la programma w.r.t. l'argomento passato ad esso.

MODIFICA:

Come menzionato da @Gaius, puoi anche aggiungere minuti a at command.Ma diciamo che il tempo è 12:30:30 e ora hai eseguito lo scheduler con now +1 minutes . Anche se è stato specificato 1 minuto, che si traduce in 60 secondi , il at in realtà non aspetta fino a 12:31:30 per eseguire il lavoro, piuttosto esegue il lavoro in 12:31:00 . Le unità di tempo possono essere minutes, hours, days, or weeks . Per ulteriori informazioni, fare riferimento a man at

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


Alcune altre idee.

top -d10 -n2 >/dev/null

vmstat 10 2 >/dev/null

sar 10 1 >/dev/null

timeout 10s tail -f /dev/null

Linux
  1. Come eseguire un comando in Shell senza salvarlo nella cronologia? [Suggerimenti per Linux]

  2. Linux Sleep Command:ritardo per un periodo di tempo specificato

  3. Comando Sudo dopo una lunga chiamata di sonno senza richiedere nuovamente la password Sudo?

  4. Il comando di sospensione tramite il comando dello schermo non viene visualizzato in Ps?

  5. Utilizzo del comando di sospensione di Linux negli script Bash

Comprendere facilmente i comandi della shell utilizzando lo script "Explain Shell" in Linux

Come passare automaticamente a una directory senza utilizzare il comando Cd in Linux

Diversi modi per elencare i contenuti della directory senza utilizzare il comando ls

Utilizzo della funzione di cronologia su Bash Shell su Ubuntu 16.04 LTS Server

Come impostare la variabile di ambiente all'interno di GDB usando il comando shell?

Aggiunta di un ritardo casuale per un comando Linux