Tìm hiểu về incron
incrond là gì ?
Các incrond (inotify cron daemon) là một daemon mà theo dõi các sự kiện hệ thống tập tin (chẳng hạn như thêm một file mới, xóa một tập tin, vv) và thực hiện lệnh hoặc các kịch bản shell. Đó là nói chung là tương tự như crond ,khác biệt ở nếu thư mục nguồn thay đổi lập tức thư mục đích cũng thay đổi .
inotify là một công nghệ thông báo hệ thống tập tin inode trên. Nó cung cấp khả năng chỉ đơn giản là theo dõi các sự kiện khác nhau trên các tập tin trong hệ thống tập tin. Đó là một sự thay thế rất nhiều mạnh mẽ của dnotify. inotify mang lại một cách thoải mái như thế nào để quản lý các tập tin được sử dụng trong các ứng dụng của bạn.
I.Cài đặt incron
Trước khi cài đặt incron cần cài đặt kho epel
# yum install incron -y
II.Khởi động vào cho chạy cùng hệt thống
# service incrond start
# chkconfig incrond on
Các file cấu hình của incrond
- /etc/incron.conf – Tập tin cấu hình chính của incron.
- /etc/incron.d/ – Thư mục này được kiểm tra bởi incrond cho các tập tin hệ thống bảng. Bạn nên đặt tất cả các tập tin cấu hình của bạn ở đây là mỗi thư mục hoặc miền tên.
- /etc/incron.allow – Tập tin này có chứa người dùng được phép sử dụng incron.
- /etc/incron.deny – Tập tin này có chứa người dùng từ chối sử dụng incron.
- /var/spool/incron – Thư mục này để kiểm tra bởi incrond cho các tập tin bảng người dùng được thiết lập bởi người sử dụng chạy các lệnh incrontab.
Cú pháp của incron như sau
<directory> <file change mask> <command or action> options
<directory> : là đường dẫn hệ thống tập tin , bất kỳ thay đổi nào trên đường dẫn này sẽ dẫn đến lệnh hoặc hành động đã thiết lập
<file change mask> : Là sự kiện của tập tin hệ thống ,mỗi sự kiện có thể dẫn đến lệnh khác nhau, sử dụng những mẫu sau để thay vào
- IN_ACCESS - File được truy cập (đọc)
- IN_ATTRIB - Đặc tính thay đổi (Quyền, nhãn thời gian, thuộc tính mở rộng, vv)
- IN_CLOSE_WRITE – Đóng lại các file văn bản đã đc mở
- IN_CLOSE_NOWRITE - không mở cho các văn bản đã được đóng lại
- IN_CREATE - Tạo file / thư mục trong đường dẫn được theo dõi
- IN_DELETE - Xóa file / thư mục trong đường dẫn được theo dõi
- IN_DELETE_SELF - Xem file / thư mục đã tự xóa
- IN_MODIFY - File đã được sửa đổi
- IN_MOVE_SELF - Xem tập tin / thư mục đã được tự di chuyển
- IN_MOVED_FROM - Tập tin di chuyển ra khỏi thư mục theo dõi
- IN_MOVED_TO - Tập tin di chuyển vào thư mục theo dõi
- IN_OPEN - Tập tin đã mở
- IN_ALL_EVENTS - là tất cả các mask trên
- IN_MOVE - là sự kết hợp của IN_MOVED_FROM và IN_MOVED_TO
- IN_CLOSE - là sự kết hợp IN_CLOSE_WRITE và IN_CLOSE_NOWRITE
Một số mask khác
- IN_DONT_FOLLOW - Không chỉ tới đích tên đường dẫn nếu nó là một liên kết tượng trưng
- IN_ONESHOT - Giám sát tên đường dẫn để chỉ một sự kiện
- IN_ONLYDIR - Chỉ xem đường dẫn nếu nó là một thư mục
- IN_NO_LOOP - Biểu tượng này sẽ vô hiệu hóa các sự kiện theo dõi cho đến khi lệnh được hoàn toàn xử lý (cho đến khi thoát trình con của nó).
<command or action> : Chưa lệnh hoặc hành động
options : là các lệnh sau
- $$ : chữ kí
- $@ : Theo dõi hệ thống tập tin đường dẫn
- $# : Tên file liên quan đến sự kiện
- $% : Sự kiện được đánh dấu ( hiển thị bằng văn bản )
- $& : Sự kiện được đánh dấu ( hiển thị bằng số )
Trước khi chỉnh sửa incrontab ,ta cần gõ lệnh sau để sửa file
# export EDITOR=nano
Gõ lệnh sau để chỉnh sửa incrontab của bạn :
# incrontab -e
Ví dụ : Ta thêm dòng sau vào incrontab, với nội dung nếu thư mục home có thay đổi thì sẽ chạy lệnh echo
/home/ IN_MODIFY echo "$$ $@ $# $% $&"
Sau đó ta vào thư mục home và tạo file test, để kiểm tra incron hoạt động ta dùng lệnh sau
# cat /var/log/cron
Sau đó sẽ hiện ra các dòng sau
Oct 5 23:25:02 maxserver incrond[12766]: table for user root changed, reloading
Oct 5 23:25:51 maxserver incrond[12766]: (root) CMD (echo "$ /home/ test IN_MODIFY 2")
như các bạn đã thấy $@ thay bằng /home/ , $# thay bằng test, $% thay bằng IN_MODIFY , $& thay bằng 2
Thêm 1 ví dụ nữa để chúng ta hiểu thêm về incron
Tôi có 1 thư mục conf.d và mỗi khi thay đổi nó tôi muốn nó restart httpd ,Tôi sẽ đặt như sau
/etc/httpd/conf.d/ IN_MODIFY service restart httpd
Ta sẽ thay đổi bất kì gì trong thư mục conf.d ,và check log /var/log/cron để xem kết quả
Chạy lệnh Rsync
Ví dụ: Tôi muốn mỗi có 1 file đc thêm vào thư mục /var/www/html/upload/ thì nó sẽ tự động chạy lệnh rsync đồng bộ file đến một server khác ,
Ta gõ lệnh sau để thêm lệnh
# incrontab -e
Rồi nhập nội dung như sau
/var/www/html/upload/ IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude ’*.tmp’ -a /var/www/html/upload/ root@localhost:/var/www/html/upload/
Nếu gặp vấn đề sự cố gì các bạn có thể check log của nó
# tail -f /var/log/cron