GNU/Linux >> Belajar Linux >  >> Linux

Shell:apakah mungkin menunda perintah tanpa menggunakan `sleep`?

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 mengeksekusi service 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 bahwa atd 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 atau crontab -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

Linux
  1. [Linux] :Cara mengecualikan direktori saat menggunakan perintah shell "tar"

  2. Perintah Tidur Linux – tunda selama waktu tertentu

  3. Menggunakan Tombol Vi Untuk Mengedit Perintah Shell Di Unix?

  1. Perintah Tidur Menggunakan Perintah Layar Tidak Ditampilkan Di Ps?

  2. Menggunakan Perintah Tidur Linux di Skrip Bash

  3. Skrip Bash:Menggunakan perintah skrip dari skrip bash untuk mencatat sesi

  1. Apakah mungkin membuat folder secara rekursif menggunakan skrip Shell?

  2. Bagaimana saya bisa menemukan versi shell saya menggunakan perintah Linux?

  3. Bagaimana cara mengatur variabel lingkungan dalam GDB menggunakan perintah Shell?