Tôi mới làm quen với lệnh dnotify/inotify. Bất kỳ ai có thể giúp tôi làm thế nào để viết một kịch bản như vậy mà nó liên tục theo dõi một thư mục và chỉ ra rằng có một số thay đổi hoặc sửa đổi nó.Làm thế nào để liên tục giám sát thư mục bằng lệnh dnotify/inotify
Trả lời
Inotify chính nó là một mô-đun hạt nhân accesible thông qua các cuộc gọi từ ví dụ. một chương trình C. http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/
Có một bộ ứng dụng được gọi inotify-công cụ, trong đó có:
inotifywait - chờ đợi những thay đổi các tập tin sử dụng inotify
và
inotifywatch - thu thập thống kê truy cập hệ thống tập tin sử dụng inotify
Bạn có thể sử dụng inotify trực tiếp từ dòng lệnh, ví dụ như thế này để liên tục theo dõi cho tất cả những thay đổi dưới thư mục chính (có thể tạo ra rất nhiều đầu ra):
inotifywait -r -m $HOME
Và đây là một kịch bản theo dõi liên tục và phản ứng với nhật ký hoạt động Apache, sao chép từ các tập tin người đàn ông của inotifywait:
#!/bin/sh
while inotifywait -e modify /var/log/messages; do
if tail -n1 /var/log/messages | grep httpd; then
kdialog --msgbox "Apache needs love!"
fi
done
Dưới đây là những gì tôi sử dụng để xem các thao tác trên một tệp riêng lẻ. "-m" gây ra giám sát và thoát chỉ sau một sự kiện. Để có được dấu thời gian, bạn cần ít nhất 3.13 phiên bản của công cụ inotify, nhưng nếu điều đó không quan trọng (hoặc không có sẵn trên hệ điều hành của bạn hoặc khó cập nhật) bạn có thể bỏ qua các tùy chọn định dạng và thời gian. "Cat /etc/resolv.conf" trong vỏ khác dẫn đến những kết quả dưới đây:
$ inotifywait -m --timefmt '%H:%M' --format '%T %w %e %f' /etc/resolv.conf
Setting up watches.
Watches established.
12:49 /etc/resolv.conf OPEN
12:49 /etc/resolv.conf ACCESS
12:49 /etc/resolv.conf CLOSE_NOWRITE,CLOSE
inotifywait có các tùy chọn để theo dõi các thư mục là tốt, vì vậy hãy kiểm manpage. Thêm -r cho đệ quy để theo dõi trẻ em của một thư mục.
Dưới đây là một ví dụ với các lệnh tôi đã gõ trong một cửa sổ khác nhau hiển thị với "->" prefix:
$ inotifywait -mr --timefmt '%H:%M' --format '%T %w %e %f' /home/acarwile/tmpdir
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
-> cd into directory, no info
-> ls in directory
13:15 /home/acarwile/tmpdir/ OPEN,ISDIR
13:15 /home/acarwile/tmpdir/ CLOSE_NOWRITE,CLOSE,ISDIR
-> touch newfile
13:16 /home/acarwile/tmpdir/ CREATE newfile
13:16 /home/acarwile/tmpdir/ OPEN newfile
13:16 /home/acarwile/tmpdir/ ATTRIB newfile
13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE newfile
-> mv newfile renamedfile
13:16 /home/acarwile/tmpdir/ MOVED_FROM newfile
13:16 /home/acarwile/tmpdir/ MOVED_TO renamedfile
-> echo hello >renamedfile
13:16 /home/acarwile/tmpdir/ MODIFY renamedfile
13:16 /home/acarwile/tmpdir/ OPEN renamedfile
13:16 /home/acarwile/tmpdir/ MODIFY renamedfile
13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile
-> touch renamedfile
13:17 /home/acarwile/tmpdir/ OPEN renamedfile
13:17 /home/acarwile/tmpdir/ ATTRIB renamedfile
13:17 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile
-> rm renamedfile
13:17 /home/acarwile/tmpdir/ DELETE renamedfile
-> cd ..; rmdir tmpdir
13:17 /home/acarwile/tmpdir/ DELETE_SELF
Sau khi ở trên, tôi đã cố gắng để làm lại tmpdir ("mkdir tmpdir") nhưng đã không có đầu ra từ đó. Tmpdir mới không phải là cùng thư mục với tmpdir cũ. Thời gian để chỉ^C và dừng itnotifywait.
Như tôi đã nói trên https://superuser.com/a/747574/28782, tôi đã thực hiện một kịch bản helper sử dụng inotifywait mà không cần một số hạn chế trực tiếp của nó: inotifyexec
dụ sử dụng (giả sử bạn đã thêm nó vào đường dẫn hệ thống của bạn như thực thi):
inotifyexec "echo test" -r .
- 1. giám sát thư mục
- 2. Giám sát sửa đổi thư mục
- 3. Làm thế nào để giám sát hiệu quả một thư mục để thay đổi trên linux?
- 4. ASP.Net giám sát thư mục debug HttpException
- 5. Giám sát nội dung của tệp/thư mục?
- 6. Giám sát ZooKeeper với Giám sát
- 7. Giám sát Memcached với tập lệnh PHP
- 8. kịch bản lệnh linux giám sát các thay đổi tệp trong các thư mục (như autospec!)
- 9. Giám sát thư mục trong Cocoa/Cocoa Touch
- 10. giám sát tệp và truy cập thư mục trên linux
- 11. Giám sát hiệu suất liên tục của các ứng dụng .NET trong sản xuất?
- 12. Giám sát
- 13. Giám sát ứng dụng virtualenv django qua người giám sát
- 14. Cách giám sát Textfile và nội dung đầu ra liên tục trong một hộp văn bản
- 15. Giám sát & kiểm tra API của bên thứ ba liên tục trên Rails
- 16. Giám sát celerybeat với người giám sát và virtualenv
- 17. Làm thế nào để giám sát kho lưu trữ git để thay đổi?
- 18. Gửi lệnh DDC/CI để giám sát trên Windows bằng Python?
- 19. Có cách nào để đặt Android WIFI (thiết bị cầm tay droid) vào chế độ giám sát không liên tục?
- 20. Giám sát hệ thống tệp bằng Haskell
- 21. Giám sát USB OSX
- 22. Làm thế nào để giám sát các nhà phát triển dữ liệu công việc trong Eclipse?
- 23. Xuất danh sách liên hệ GMail qua tập lệnh không giám sát
- 24. Giám sát IIS 6.0
- 25. giám sát với chọn
- 26. Quy tắc Auditd - auditctl chỉ giám sát thư mục (không phải tất cả thư mục phụ và tệp, v.v.)
- 27. Giám sát lưu lượng mạng
- 28. Giám sát: Có cách nào để liên lạc lại với trẻ không?
- 29. Làm thế nào để sử dụng Fiddler để giám sát một Dịch vụ Windows?
- 30. Làm thế nào để giám sát một máy chủ web với daemontools?
Ví dụ được cung cấp không thực sự theo dõi "liên tục" như đã nêu trên câu hỏi. Nó thoát khỏi sự kiện đầu tiên. Trong thực tế, một số sự kiện có thể bị bỏ qua trong khi phần bên trong của 'do' đang được thực thi. – Unode
Không chỉ chúng có thể bị bỏ qua như @Unode đã nói, mà còn việc khởi tạo diễn ra mỗi lần thay đổi xảy ra, vì vậy nó không phải là một phương pháp hiệu quả. – Wernight
Để làm rõ, các nhận xét của @Unode và Wernight chỉ áp dụng cho ví dụ cuối cùng trong bài đăng (kịch bản để phản ứng với các sự kiện nhật ký Apache). – depquid