Thứ Bảy, 21 tháng 6, 2014

Mirror site dùng rsync - Phần 2

Ở phần trước tôi đã trình bày cách đồng bộ bằng rsync nhưng theo cách thủ công. Bạn không thể hàng phút lại gõ và chạy câu lệnh đó được. Để tự động hóa bạn chỉ cần đặt lịch chạy command. Crontab là ứng dụng đặt lịch phổ biến trên linux. 

Điều chỉnh hồ sơ crontab:
crontab -e

Bổ sung vào cuối hồ sơ:
*/1 * * * * /usr/bin/rsync -avz --delete /usr/local/apache2/htdocs/test/ -e "ssh -i <path to private file>" test@192.168.56.250:/var/www/test/

Ở đây tôi đặt lịch command sau mỗi phút.

Bạn mở syslog:
tail -f /var/log/syslog

Đợi một phút sau thấy log bắn ra thông báo cronjob đã được thực hiện nhưng thực tế là không có gì được đồng bộ cả. Lý do cho hiện tượng này là cron không biết gì về ssh-agent nên nó không thể nói chuyện với ssh-agent được, ssh-agent lại là thành phần quản lý private key, không có private key đồng nghĩa key based authentication không thể hoàn tất.

Để giải quyết vấn đề này, bạn dùng keychain. 
sudo apt-get install keychain

Keychain sẽ cho phép dùng lại ssh-agent và giúp cron nói chuyện được với ssh-agent. Trước tiên cần chạy keychain để nó nhận biết ssh-agent đang hoạt động.
keychain --nogui <path to private key>

Kết quả của lệnh trên là một file $HOME/.keychain/$HOSTNAME-sh được tạo ra. File này chứa hầu hết nội dung của output ssh-agent -s

Cuối cùng bạn chèn thêm vào cronjob một đoạn trỏ đến $HOME/.keychain/$HOSTNAME-sh
*/1 * * * * . $HOME/.keychain/$HOSTNAME-sh; /usr/bin/rsync -avz --delete /usr/local/apache2/htdocs/test/ -e "ssh -i <path to private file>" test@192.168.56.250:/var/www/test/

Chỉnh sửa hồ sơ crontab không yêu cầu restart cron service. Bạn chỉ cần đợi tiếp một phút để thấy kết quả như ý muốn.

Tham khảo: http://www.howtoforge.com/mirroring_with_rsync

Không có nhận xét nào:

Đăng nhận xét