Apakah mungkin dalam baris perintah Linux untuk memiliki perintah yang diulang setiap n detik?
Katakanlah, saya memiliki impor berjalan, dan saya lakukan
ls -l
untuk memeriksa apakah ukuran file meningkat. Saya ingin memiliki perintah untuk mengulang ini secara otomatis.
watch mysql dbname -e \"show processlist\;\"
brew install watch
sumber
watch
juga memiliki efek samping yang disayangkan membersihkan layar, jadi terkadang perulangan berguna. Yang digunakan tergantung pada format output yang diinginkan.--differences
untuk menyorotnya (Jika Anda khawatir tentang pengecatan ulang terminal)watch
. Tonton tidak berfungsi misalnya ketika Anda ingin membuat nomor acak di setiap doa, miswatch -n 1 echo ${RANDOM}
. Acak hanya akan dipanggil satu kali."menonton" tidak memungkinkan sepersekian detik di Busybox, sementara "tidur" tidak. Jika itu penting bagi Anda, coba ini:
sumber
sleep
sudah kembali0
. Karena itu, saya menggunakan:Ini sedikit lebih pendek dari solusi mikhail. Kelemahan kecilnya adalah ia tidur sebelum menjalankan perintah target untuk pertama kalinya.
sumber
Jika perintah berisi beberapa karakter khusus seperti pipa dan tanda kutip, perintah harus diisi dengan tanda kutip. Misalnya, untuk mengulang
ls -l | grep "txt"
, perintah arloji harus:watch -n 5 'ls -l | grep "txt"'
sumber
Menjalankan perintah secara berkala tanpa cron dimungkinkan saat kita menggunakannya
while
.Sebagai perintah:
Contoh:
Jangan lupa yang terakhir
&
karena akan membuat loop Anda di latar belakang. Tetapi Anda perlu menemukan proses id dengan perintah "ps -ef | grep your_script" maka Anda harus membunuhnya. Jadi silakan tambahkan '&' saat Anda menjalankan skrip.Berikut ini adalah loop yang sama dengan skrip. Buat file "while_check.sh" dan letakkan ini di dalamnya:
Kemudian jalankan dengan mengetik
bash ./while_check.sh &
sumber
echo $!
setelah setiap proses latar belakang diluncurkan - itulah PID dari proses anak terakhir yang diluncurkan di latar belakang.echo `date`
hanya cara yang buruk dan sedikit buggy untuk menulis adildate
. (Bug ada hubungannya dengan kurangnya mengutip argumen untukecho
.) Lihat juga penggunaan tidak berguna dariecho
.menonton baik tetapi akan membersihkan layar.
sumber
Jika Anda ingin menghindari "drifting", artinya Anda menginginkan perintah untuk mengeksekusi setiap N detik terlepas dari berapa lama perintah tersebut (dengan asumsi dibutuhkan kurang dari N detik), berikut adalah beberapa bash yang akan mengulangi perintah setiap 5 detik dengan satu- akurasi kedua (dan akan mencetak peringatan jika tidak bisa mengikuti):
Mungkin masih sedikit melayang karena tidur hanya akurat untuk satu detik. Anda dapat meningkatkan akurasi ini dengan menggunakan perintah tanggal secara kreatif.
sumber
Jika Anda ingin melakukan sesuatu beberapa kali Anda selalu dapat melakukan ini:
sumber
for x in {1..300} ; do
perintah bash do||break;sleep 1.5; done
Anda dapat menjalankan yang berikut ini dan memfilter ukurannya saja. Jika file Anda disebut
somefilename
Anda dapat melakukan hal berikutwhile :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done
Salah satu dari banyak ide.
sumber
Untuk meminimalkan penyimpangan lebih mudah, gunakan:
masih akan ada sejumlah kecil penyimpangan karena waktu bash untuk menjalankan struktur loop dan perintah sleep untuk benar-benar mengeksekusi.
petunjuk: ':' evals to 0 ie true.
sumber
Akan Menjalankan
ls -l
perintah setelah setiap 5sOutput: -
sumber
Solusi singkat, yang sangat berguna jika Anda ingin menjalankan perintah berulang kali sampai gagal, dan memungkinkan Anda melihat semua output.
sumber