GNU/Linux >> Znalost Linux >  >> Linux

Shell:je možné zpozdit příkaz bez použití `sleep`?

S bash vestavěné, můžete:

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

Chcete-li usnout na 10 sekund bez použití sleep . coproc je udělat tak, že read 's stdin je potrubí, odkud nikdy nic nevyjde. || true protože wait stav ukončení bude odrážet doručení SIGALRM, které způsobí ukončení shellu, pokud errexit možnost je nastavena.

V jiných shellech:

mksh a ksh93 mít sleep vestavěný, nemá smysl tam používat něco jiného (ačkoli oba také podporují read -t ).

zsh podporuje také read -t , ale má také vestavěný obal kolem select() , takže můžete také použít:

zmodload zsh/zselect
zselect -t 1000 # centiseconds

Pokud chcete naplánovat spouštění věcí z interaktivní relace shellu, podívejte se také na zsh/sched modul v zsh .


Máte alternativy k sleep :Jsou at a cron . Na rozdíl od sleep tyto potřebují, abyste poskytli čas, ve kterém je potřebujete ke spuštění.

  • Ujistěte se, že atd služba běží spuštěním service atd status .
    Nyní řekněme, že datum je 11:17 UTC; pokud potřebujete provést příkaz v 11:25 UTC, syntaxe je:echo "This is a test" | at 11:25 .
    Nyní mějte na paměti, že atd ve výchozím nastavení nebude protokolování dokončení úloh. Více viz tento odkaz. Je lepší, aby vaše aplikace měla vlastní protokolování.

  • Úlohy můžete plánovat v cron , více viz:man cron zobrazíte jeho možnosti nebo crontab -e přidat nová pracovní místa. /var/log/cron lze zkontrolovat informace o provádění úloh.

Pro informaci sleep system call pozastaví aktuální provádění a naplánuje jej w.r.t. argument na to přešel.

UPRAVIT:

Jak zmínil @Gaius, můžete také přidat čas v minutách na at command.Ale řekněme, že čas je 12:30:30 a nyní jste spustili plánovač s now +1 minutes . I když byla zadána 1 minuta, což znamená 60 sekund, at opravdu nečeká do 12:31:30 k provedení úlohy, spíše provede úlohu na 12:31:00 . Časové jednotky mohou být minutes, hours, days, or weeks . Více viz man at

např.:echo "ls" | at now +1 minutes


Některé další nápady.

top -d10 -n2 >/dev/null

vmstat 10 2 >/dev/null

sar 10 1 >/dev/null

timeout 10s tail -f /dev/null

Linux
  1. [Linux] :Jak vyloučit adresář při použití příkazu shellu „tar“.

  2. Jak provést příkaz v prostředí Shell bez jeho uložení do historie? [Tipy pro Linux]

  3. Příkaz Sudo po dlouhém spánku Volejte bez opětovného vyzvání hesla Sudo?

  1. Použití Linux Sleep Command ve skriptech Bash

  2. Použití příkazu passwd ze skriptu shellu

  3. Je možné rekurzivně vytvářet složky pomocí skriptu shell?

  1. Linux Sleep Command – zpoždění po určitou dobu

  2. Jak najdu svou verzi shellu pomocí příkazu Linux?

  3. Jak nastavit proměnnou prostředí v GDB pomocí příkazu shell?