Thực sự mà nói, dạo gần đây tôi đang có chút "crush" với việc quay lại con đường thuần Bash để làm automation, thay vì chạy theo các công cụ "hot" như Ansible hay Docker Compose cho mọi thứ.
Hồi mới bắt đầu, tôi cũng nghĩ mình cần một giải pháp "đỉnh cao". Thấy đồng nghiệp dùng Ansible để deploy server, tôi cũng mua course, setup tower, viết playbook hàng trăm dòng. Nhưng càng dùng, tôi càng thấy... nặng nề. Lúc nào cũng cần cài agent, config SSH key phức tạp, mà đôi khi chỉ để chạy một script đơn giản như rotate log file hay backup database.
Đó là lúc tôi nhận ra sức mạnh của sự tối giản. Kết hợp một chút Bash scripting với cron thì nó mượt mà và nhẹ tênh đến lạ. Tôi nhớ rõ một lần server sập do một job cron bị lỗi, không có log rõ ràng, tôi phải ngồi debug cả giờ. Từ đó, tôi quyết định viết lại toàn bộ các job tự động của mình với quy tắc: Everything as code, but keep it simple.
Thay vì viết một playbook Ansible cồng kềnh, giờ tôi chỉ cần một file shell script nhỏ. Ví dụ, để backup cơ sở dữ liệu MySQL mỗi ngày, trước đây tôi có thể dùng một role Ansible phức tạp. Bây giờ, tôi chỉ cần một script đơn giản như thế này:
#!/bin/bash
DB_NAME="my_app_db"
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
mysqldump -u root -p$MYSQL_PASS $DB_NAME | gzip > $BACKUP_DIR/$DB_NAME_$DATE.sql.gz
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
Và chỉ cần thêm một dòng vào crontab là xong:
0 2 * * * /opt/scripts/backup_mysql.sh
Nghe có vẻ "phần tử" và thiếu chuyên nghiệp không? Nhưng với tôi, đây là sự thực dụng nhất. Tôi không muốn phụ thuộc vào hàng loạt các package không cần thiết, cũng không muốn hệ thống của mình bị chậm đi vì các agent hoạt động trong background.
Ansible tuyệt vời cho việc quản lý cấu hình (configuration management) ở quy mô lớn, nhưng cho những tác vụ lặp đi lặp lại đơn giản (automation tasks), Bash + Cron vẫn là "vua". Nó cho phép tôi kiểm soát mọi thứ, debug nhanh chóng bằng echo và hiểu rõ từng dòng lệnh đang chạy.
Có người bảo rằng viết Bash khó bảo trì, dễ bị lỗi an ninh. Đúng là vậy, nếu bạn viết ẩu. Nhưng nếu bạn viết cẩn thận, test kỹ, thì nó vẫn là công cụ mạnh mẽ nhất trên Unix. Tôi tin rằng đôi khi, chúng ta đang "over-engineering" quá nhiều thứ. Hãy nhớ: Simplicity is the ultimate sophistication.
Còn bạn, bạn đang dùng tool gì để tự động hóa job hằng ngày? Hay cũng đang quay về Bash như tôi?