Trên server, các file log thường phát sinh rất nhiều và nếu không dọn dẹp định kỳ, chúng có thể chiếm đầy dung lượng. Ansible hỗ trợ chúng ta tự động hoá việc này thông qua cron module. Trong bài này, chúng ta sẽ tạo một playbook để:
- Viết script dọn log (
cleanup_logs.sh) - Tạo một cron job chạy script này vào 03:30 sáng thứ Hai hàng tuần.
Xem thêm:
Ansible là gì? Vì sao chúng ta lại cần nó – Bài 1
1. Cron job là gì?
Cron là một daemon (dịch vụ chạy ngầm) trong hệ điều hành Unix/Linux, có nhiệm vụ thực thi các lệnh hoặc script theo lịch định sẵn.
Job ở đây nghĩa là một tác vụ (task) hoặc công việc mà bạn muốn hệ thống tự động chạy.
Ví dụ:
- Bạn muốn sao lưu database mỗi ngày lúc 2h sáng → tạo một cron job để chạy script backup vào giờ đó.
- Bạn muốn dọn dẹp log mỗi tuần 1 lần → tạo một cron job để chạy script cleanup.
2. Chuẩn bị script dọn log
Trước tiên, bạn cần có một script cleanup_logs.sh trên máy Ansible Control (máy chạy Ansible). Ví dụ nội dung đơn giản như sau:
#!/bin/bash
# cleanup_logs.sh - Script dọn dẹp log cũ
# Thư mục chứa log
LOG_DIR="/var/log"
# Xoá log cũ hơn 7 ngày
find $LOG_DIR -type f -name "*.log" -mtime +7 -exec rm -f {} \;
echo "Log cleanup completed on $(date)" >> /var/log/cleanup_history.log
Cấp quyền thực thi cho script này:
sudo chmod +x cleanup_logs.sh
3. Viết Ansible Playbook
Tạo file log_cleanup.yml với nội dung:
---
- name: Schedule a weekly log cleanup
hosts: app
become: 'yes'
tasks:
- name: Ensure log cleanup script is exists
copy:
src: /home/azureadmin/cleanup_logs.sh
dest: /usr/local/bin/cleanup_logs.sh
mode: '0755'
- name: Schedule weekly log cleanup
cron:
name: "Weekly Log Cleanup"
job: "/usr/local/bin/cleanup_logs.sh"
minute: "30"
hour: "3"
day: "*"
month: "*"
weekday: "1"
user: root
Giải thích:
copy: Copy script từ máy Ansible Control sang máy remote tại đường dẫn/usr/local/bin/.mode: '0755': Cấp quyền thực thi cho script.cron: Tạo cron job chạy script định kỳ.minute: "30"→ chạy lúc phút thứ 30.hour: "3"→ chạy lúc 3 giờ sáng.weekday: "1"→ số 1 là thứ Hai.user: "root"→ job chạy dưới quyền root.job: "/usr/local/bin/cleanup_logs.sh"→ script cần chạy.
4. Chạy Playbook
Thực thi playbook:
ansible-playbook -i inventory.ini log_cleanup.yml
Trong đó:
inventory.inilà file khai báo danh sách server.log_cleanup.ymllà playbook vừa tạo.
5. Kiểm tra cron job
Sau khi chạy thành công, bạn có thể SSH vào server và kiểm tra cron của root:
crontab -l -u root
Kết quả sẽ thấy dòng:
# Ansible: Weekly Log Cleanup 30 3 * * 1 /usr/local/bin/cleanup_logs.sh
Bài viết cùng chủ đề:
ansible playbook là gì? Cấu trúc và cách viết chuẩn – Bài 4
Ansible Variables – Biến trong Ansible là gì và cách sử dụng – Bài 5
Cảm ơn bạn đã tham khảo ansible tutorial trên ttnguyen.net