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.
davidparks21
sumber
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 $#
Cakemox
sumber
+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.

Suhail Sherif
sumber
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

Rafiq Maniar
sumber
0

Cara cepat dan kotor:

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

wait_file_changed /tmp/potato
dctremblay
sumber