Bisakah skrip shell menunggu file berubah dan mengambil tindakan?


12

Saya ingin tahu apakah saya dapat menulis skrip yang akan memonitor perubahan dalam file dan melakukan beberapa tindakan ketika perubahan terdeteksi.

Penjelasan detail:

  1. OpenVPN menulis statusnya ke file setiap 1 menit.
  2. Saya perlu mengurai file status ini dan mengambil tindakan.
  3. OpenVPN memotong file status sebelum menulis ke sana.
  4. Saya mencoba menulis ke pipa bernama, tetapi saya mendapatkan kesalahan yang tidak diinginkan (tapi tidak fatal) di aplikasi ketika gagal memotong pipa.

Jika modifikasi sebenarnya ditambahkan ke file, bertahan tail -fmungkin adalah cara termudah. Tetapi hanya untuk menambahkan.
SF.

Jawaban:


21

Murah dan kotor cara:

Ulangi stat -c %Y filedan ambil tindakan saat waktu modifikasi berubah.

Mungkin lebih baik:

Gunakan layanan cron inotify untuk menonton acara modifikasi file dan menjalankan tindakan Anda:

/path/to/your/file IN_MODIFY /path/to/your/script $#

+1 untuk solusi kedua
Michael Lowman


2

inotify akan menjadi cara yang tepat untuk melakukannya. Tutorial diberikan dalam beberapa edisi majalah LinuxForYou untuk pertanyaan ini.


0

Jadi punya skrip yang:

1) Memeriksa waktu modifikasi pada file (dengan stat)
2) Jika waktu modifikasi lebih baru daripada saat terakhir diperiksa, itu telah berubah
3) Mengurai dan melakukan tindakan Anda
4) Lain tidur selama 1 menit dan kemudian kembali


0

Cara cepat dan kotor:

function wait_file_changed {
    tail -fn0 "$1" | head -n1
}

wait_file_changed /tmp/potato
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.