Bagaimana saya bisa mengulangi perintah setiap interval waktu, sehingga akan memungkinkan saya untuk menjalankan perintah untuk memeriksa atau memantau direktori?
Tidak perlu skrip, saya hanya perlu perintah sederhana untuk dieksekusi di terminal.
Bagaimana saya bisa mengulangi perintah setiap interval waktu, sehingga akan memungkinkan saya untuk menjalankan perintah untuk memeriksa atau memantau direktori?
Tidak perlu skrip, saya hanya perlu perintah sederhana untuk dieksekusi di terminal.
Anda dapat menggunakan watch
perintah, arloji digunakan untuk menjalankan perintah yang ditunjuk secara berkala.
Buka Terminal dan ketik:
watch -n x <your command>
ubah x menjadi waktu dalam detik yang Anda inginkan.
Untuk bantuan lebih lanjut menggunakan watch
perintah dan opsinya, jalankan man watch
atau kunjungi Tautan ini .
Sebagai contoh: daftar berikut ini, setiap 60 - an , di Terminal yang sama, isi direktori Desktop sehingga Anda dapat mengetahui jika ada perubahan yang terjadi:
watch -n 60 ls -l ~/Desktop
watch -n 1 'echo $COLUMNS'
danwatch -n 1 echo $COLUMNS
ketika mengubah ukuran terminal Anda - yang pertama diperluas setiap detik, tetapi yang terakhir diperluas hanya sekali sebelumwatch
dimulai.watch
dengan perintah tipe "history enabled"? Saya suka menggunakanwatch
, tetapi kadang-kadang saya lebih suka melihat log dari eksekusi sebelumnya juga, bukan hanya yang terakhir. Dan ya, saya tahu saya bisa menggunakan scripting (while true
) untuk mencapai ini, tetapi menggunakanwatch
utilitiy jauh lebih bersih!Anda juga dapat menggunakan perintah ini di terminal, terlepas dari jawaban nux:
Contoh
Perintah ini akan mencetak output
ls
pada interval 2 detik.Gunakan Ctrl+ Cuntuk menghentikan proses.
Ada beberapa kekurangan
watch
watch
akan menafsirkan urutan warna ANSI yang melewati karakter melarikan diri menggunakan-c
atau--color
opsi. Misalnya outputpygmentize
akan berfungsi tetapi akan gagal untukls --color=auto
.Dalam keadaan di atas ini mungkin muncul sebagai opsi yang lebih baik.
sumber
watch
ada untuk itu, ini agak tidak berguna saya akan katakanwatch
bagus dalam banyak kasus. Itu sebabnya saya sebutkan "terlepas dari jawaban nux" di awal. Tetapi ada beberapa masalah denganwatch
misalnya Seseorang tidak dapat menggunakan perintah alias denganwatch
. Ambil contohll
yang aliasls -laF
tapi tidak bisa digunakanwatch
. Juga dalam kasus jika output dari perintah apa pun cukup lama Anda akan kesulitan dalam menggulir menggunakanwatch
. Dalam beberapa kasus khusus ini jawaban ini mungkin muncul pilihan yang lebih baik.watch
setidaknya memungkinkan-c
atau--color
pilihan untuk output berwarna.while sleep x
lebih baik - lebih mudah untuk dibunuh.watch
itu, ia menyimpan sejarah perintah.Hanya ingin memberikan jawaban souravc dan nux :
watch
akan bekerja dengan baik di Ubuntu, Anda mungkin ingin menghindari itu jika Anda ingin "Unix-fu" Anda menjadi murni - di FreeBSD misalnya, arloji adalah perintah untuk "mengintai jalur tty lain".while true; do command; sleep SECONDS; done
juga memiliki peringatan - perintah Anda mungkin sulit untuk membunuh menggunakan CTR + C . Anda mungkin ingin memilihwhile sleep SECONDS; do command; done
- tidak hanya lebih pendek, tetapi juga lebih mudah untuk diinterupsi. Peringatannya adalah ia akan tidur lebih dulu, kemudian jalankan perintah Anda, jadi Anda harus menunggu beberapa saatSECONDS
sebelum kemunculan pertama perintah itu terjadi.sumber
sleep
diwhile
loop? Saya tidak dapat menemukan perbedaan, Ctrl + C memutus loop langsung tidak peduli apa.command
dansleep
dan hanya istirahat jika Anda membunuhtrue
.Kedengarannya seperti tugas ideal untuk
cron
daemon yang memungkinkan untuk menjalankan perintah periodik. Jalankancrontab -e
perintah untuk mulai mengedit konfigurasi cron pengguna Anda. Formatnya didokumentasikan dalam crontab (5) . Pada dasarnya Anda memiliki lima bidang yang berkaitan dengan waktu dan dipisahkan oleh ruang diikuti oleh perintah:Misalnya, jika Anda ingin menjalankan skrip Python setiap hari Selasa, jam 11 pagi:
Ada juga beberapa nama khusus yang menggantikan waktu, seperti
@reboot
. Sangat membantu jika Anda perlu membuat direktori sementara. Dari crontab saya (tercantum dengancrontab -l
):sumber
cron
berjalan di belakang layar daripada di terminalJika Anda memantau sistem file, maka
inotifywait
itu brilian dan tentu saja menambahkan lebih sedikit beban pada sistem Anda.Contoh:
Pada terminal 1 ketik perintah ini:
Kemudian di terminal ke-2 , perintah apa pun yang memengaruhi direktori saat ini,
Kemudian di terminal asli inotifywait akan bangun dan melaporkan acara tersebut
Atau dalam satu lingkaran
sumber
grep something InALogFile|less
apakah itu skrip?.
saya tidak bisa mengabaikan perintah.-m
untuk terus memantau tanpa loop.Anda dapat membuat
repeat
perintah sendiri dengan melakukan langkah-langkah berikut; kredit di sini :Pertama, buka
.bash_aliases
file Anda :Kedua, rekatkan baris ini di bagian bawah file dan simpan:
Ketiga, tutup dan buka kembali terminal Anda, atau ketik:
Dan lagi! Anda sekarang dapat menggunakannya seperti ini:
atau
sumber
Anda bisa menggunakan crontab. jalankan perintah
crontab -e
dan buka dengan editor teks pilihan Anda, lalu tambahkan baris iniIni akan menjalankan perintah Anda setiap 10 menit
Ini akan menjalankan perintah Anda setiap 4 jam
Solusi lain yang mungkin
X beberapa kali untuk mengulang.
Y waktu menunggu untuk mengulang.
Contoh:
sumber
Kekhawatiran lain dengan pendekatan "jam tangan" yang diusulkan di atas adalah bahwa ia hanya menampilkan hasilnya ketika proses dilakukan. "date; sleep 58; date" akan menampilkan 2 tanggal hanya setelah 59 detik ... Jika Anda memulai sesuatu yang berjalan selama 4 menit, yang menampilkan secara perlahan beberapa halaman konten, Anda tidak akan benar-benar melihatnya.
Di sisi lain, kekhawatiran dengan pendekatan "sementara" adalah bahwa ia tidak mempertimbangkan durasi tugas.
Dengan ini, skrip akan dijalankan kapan saja setiap menit, kadang-kadang membutuhkan waktu 1m40. Jadi, bahkan jika sebuah cron akan dapat menjalankannya setiap menit, di sini, itu tidak akan berjalan.
Jadi untuk melihat output pada shell seperti yang dihasilkan dan menunggu waktu permintaan yang tepat, Anda perlu melihat waktu sebelumnya, dan sesudahnya, dan loop dengan while.
Sesuatu seperti:
Ini akan menampilkan ini:
Seperti yang Anda lihat, perintah dijalankan setiap menit:
Jadi ganti saja perintah "sleep
echo $(( ( RANDOM % 30 ) + 1 ))
" dengan apa yang Anda inginkan dan itu akan dijalankan, pada terminal / shell, tepat setiap menit. Jika Anda ingin jadwal lain, ubah saja "60" detik dengan apa pun yang Anda butuhkan.Versi lebih pendek tanpa garis debug:
sumber