Dengan bash
bawaan, Anda dapat melakukan:
coproc read -t 10 && wait "$!" || true
Untuk tidur selama 10 detik tanpa menggunakan sleep
. coproc
adalah membuat read
stdin adalah pipa di mana tidak akan ada yang keluar. || true
karena wait
status keluar akan mencerminkan pengiriman SIGALRM yang akan menyebabkan shell keluar jika errexit
opsi disetel.
Di shell lain:
mksh
dan ksh93
memiliki sleep
built-in, tidak ada gunanya menggunakan yang lain di sana (meskipun keduanya juga mendukung read -t
).
zsh
juga mendukung read -t
, tetapi juga memiliki pembungkus bawaan di sekitar select()
, sehingga Anda juga dapat menggunakan:
zmodload zsh/zselect
zselect -t 1000 # centiseconds
Jika yang Anda inginkan adalah menjadwalkan berbagai hal untuk dijalankan dari sesi shell interaktif, lihat juga zsh/sched
modul di zsh
.
Anda memiliki alternatif untuk sleep
:Mereka adalah at
dan cron
. Bertentangan dengan sleep
ini membutuhkan Anda untuk menyediakan waktu yang Anda butuhkan untuk menjalankannya.
-
Pastikan
atd
service berjalan dengan mengeksekusiservice atd status
.
Sekarang katakanlah tanggalnya adalah 11:17 UTC; jika Anda perlu menjalankan perintah pada pukul 11:25 UTC, sintaksnya adalah:echo "This is a test" | at 11:25
.
Sekarang perlu diingat bahwaatd
secara default tidak akan mencatat penyelesaian pekerjaan. Untuk lebih merujuk tautan ini. Sebaiknya aplikasi Anda memiliki logging sendiri. -
Anda dapat menjadwalkan pekerjaan di
cron
, untuk referensi lebih lanjut :man cron
untuk melihat opsinya ataucrontab -e
untuk menambah pekerjaan baru./var/log/cron
dapat diperiksa untuk info tentang eksekusi tugas.
FYI sleep system call
menangguhkan eksekusi saat ini dan menjadwalkannya. argumen diteruskan ke sana.
EDIT:
Seperti yang disebutkan @Gaius, Anda juga dapat menambahkan waktu menit ke at
command.Tapi katakanlah waktu adalah 12:30:30
dan sekarang Anda menjalankan penjadwal dengan now +1 minutes
. Meskipun 1 menit, yang diterjemahkan menjadi 60 detik telah ditentukan, at
tidak benar-benar menunggu sampai 12:31:30
untuk mengeksekusi pekerjaan, melainkan mengeksekusi pekerjaan di 12:31:00
. Satuan waktu bisa minutes, hours, days, or weeks
. Untuk referensi lebih lanjut man at
misalnya:echo "ls" | at now +1 minutes
Beberapa ide lain.
top -d10 -n2 >/dev/null
vmstat 10 2 >/dev/null
sar 10 1 >/dev/null
timeout 10s tail -f /dev/null