Tự động hóa công việc với cron
và at
1. Tại sao cần tự động hóa?
Tự động hóa nhiệm vụ — là nền tảng cho bất kỳ quản trị viên hệ thống nào, đặc biệt là trong Linux. Hãy tưởng tượng công việc mà không có tự động hóa: mỗi sáng bạn truy cập vào terminal và gõ cùng một lệnh, để sao lưu dữ liệu của bạn, nén lại, gửi lên server và xóa các log cũ. Sau một tuần, chuỗi công việc này sẽ khiến bạn suy nghĩ đến việc đổi nghề… Nhưng không, chúng tôi ở đây để dạy bạn cách biến máy tính thành công cụ trung thành của bạn.
Bài giảng hôm nay — là phép thuật của thời gian và nhiệm vụ. Chúng ta sẽ học cách tự động hóa các quy trình ở mức độ hệ điều hành bằng các công cụ không thể tin được như cron
và at
. Những công cụ này tiết kiệm rất nhiều thời gian, và đôi khi là cả thần kinh nữa.
Tự động hóa — là chiếc phao cứu sinh cho bất kỳ nhiệm vụ lặp lại nào. Ví dụ, bạn có một script tạo báo cáo cho sếp của bạn. Báo cáo này được yêu cầu mỗi sáng lúc 8:00. Thay vì phải dậy sớm để tự chạy script (và có nguy cơ bận rộn với ly cà phê và quên chạy), bạn có thể cấu hình cron
để thực hiện nhiệm vụ này một cách tự động.
cron
— là công cụ cho các nhiệm vụ lặp lại định kỳ, thực hiện vào thời gian đã xác định.
at
— là công cụ cho các nhiệm vụ chỉ thực hiện một lần, vào một thời điểm cụ thể.
2. Làm việc với cron
cron
là gì?
cron
— là một daemon (quá trình hệ thống) chạy nền và thực hiện các tác vụ được lập lịch tại thời gian định trước. Lịch trình cho các tác vụ này được lưu trữ trong cái gọi là crontab
— đây là các tập tin văn bản. Mỗi người dùng trong hệ thống có thể có crontab
riêng của mình.
Nhiệm vụ đầu tiên của bạn trong cron
Đây là cách lệnh cơ bản để làm việc với cron
:
crontab -e
Lệnh này mở crontab
của người dùng hiện tại để chỉnh sửa. Bạn có thể thêm các công việc bằng cách chỉ định định dạng lịch trình.
Cú pháp lịch trình
Một dòng trong crontab
bao gồm sáu trường:
* * * * * COMMAND
- - - - -
| | | | └─ Ngày trong tuần (0–7, với 0 và 7 là Chủ nhật)
| | | └── Tháng (1–12)
| | └─── Ngày trong tháng (1–31)
| └──── Giờ (0–23)
└───── Phút (0–59)
Ví dụ: Thực hiện echo "Hello, Linux"
mỗi ngày vào buổi trưa:
0 12 * * * echo "Hello, Linux"
Thực hành: chạy một công việc đơn giản
Mở
crontab
của bạn để chỉnh sửa:crontab -e
Thêm dòng:
*/5 * * * * echo "Hello, world! The time is $(date)" >> ~/cron_test.log
Công việc này sẽ thêm dòng với thời gian hiện tại vào tập tin
cron_test.log
mỗi 5 phút. Lưu tập tin và thoát ra.Kiểm tra xem công việc đã được chạy chưa:
tail -f ~/cron_test.log
Sau 5 phút, bạn sẽ thấy ghi chép mới được cập nhật trong tập tin.
Xem các công việc được lập lịch
Để kiểm tra các công việc hiện tại:
crontab -l
Xóa công việc
Để xóa tất cả các công việc từ crontab
:
crontab -r
Các ví dụ thực tế khi sử dụng cron
Backup tệp
Giả sử bạn muốn backup các tệp từ thư mục /var/logs
mỗi đêm lúc 3 giờ:
Viết một script:
#!/bin/bash tar -czf /backup/logs_$(date +\%Y-\%m-\%d).tar.gz /var/logs
Đặt lịch trình trong
crontab
:0 3 * * * /path/to/script.sh
Vậy là xong! Bạn sẽ không bao giờ quên tạo bản sao lưu nữa.
Thông báo khi CPU tải cao
Ví dụ, bạn muốn nhận thông báo nếu tải CPU cao hơn 80%:
Viết một script:
#!/bin/bash LOAD=$(uptime | awk '{print $10}' | sed 's/,//') if (( $(echo "$LOAD > 0.80" | bc -l) )); then echo "High CPU load: $LOAD" | mail -s "CPU Alert" you@example.com fi
Thiết lập lịch trình:
*/10 * * * * /path/to/cpu_check.sh
3. Làm việc với at
at
cho phép thực hiện một công việc một lần vào thời gian cụ thể. Khác với cron
, các công việc at
không lặp lại. Điều này rất tiện cho các công việc kiểu "làm cái này vào 9 giờ sáng mai".
Công việc đơn giản với at
Ví dụ làm thế nào để lên lịch một công việc:
echo "echo 'Chào Linux!'" | at now + 1 minute
Lệnh này sẽ chạy lệnh echo 'Chào Linux!'
sau một phút.
Bạn cũng có thể chỉ định thời gian và ngày cụ thể:
echo "echo 'Sao lưu hoàn tất!'" | at 10:30 AM tomorrow
Quản lý công việc at
Sau khi thêm công việc, bạn có thể xem danh sách của chúng:
atq
Ví dụ kết quả đầu ra:
1 Tue Oct 31 10:30:00 2023 a user
2 Tue Oct 31 11:00:00 2023 a user
Để xóa một công việc:
atrm <job_id>
Thực hành: sử dụng at
cho thông báo
Tạo một công việc để thông báo sau 2 phút:
echo "notify-send 'Hết giờ!'" | at now + 2 minutes
Kiểm tra danh sách công việc:
atq
Chờ cửa sổ thông báo xuất hiện sau 2 phút.
4. Các lỗi thường gặp khi làm việc với cron
và at
Một trong những vấn đề phổ biến nhất là chỉ định đường dẫn sai đến script hoặc lệnh. Hãy nhớ rằng cron
chạy trong môi trường tối thiểu, vì vậy có thể không biết biến của bạn như PATH
. Cách tốt nhất là sử dụng đường dẫn tuyệt đối.
Ví dụ, nếu bạn muốn chạy một script Python:
*/30 * * * * /usr/bin/python3 /path/to/script.py
Hãy đảm bảo rằng script có quyền thực thi:
chmod +x /path/to/script.sh
Ứng dụng thực tế?
Kỹ năng tự động hóa là cần thiết trong hầu hết các nghề nghiệp liên quan đến IT. Bạn có thể sử dụng kiến thức này:
- Để tự động hóa các công việc hệ thống lặp lại.
- Để cấu hình sao lưu dữ liệu định kỳ.
- Để giám sát trạng thái của các máy chủ.
- Trong các buổi phỏng vấn, nơi thường hỏi về
cron
và tự động hóa.
Nếu bạn làm việc trong DevOps, quản trị hệ thống hoặc đơn giản muốn làm việc hiệu quả hơn, hiểu biết về cron
và at
sẽ giúp bạn nổi bật và tiết kiệm rất nhiều thời gian.
Bây giờ bạn đã biết cách để Linux làm việc cho bạn. Lần tới khi ai đó phàn nàn về công việc lặp lại, chỉ cần mỉm cười, bởi vì bạn là bậc thầy tự động hóa!
GO TO FULL VERSION