CodeGym /Các khóa học /Docker SELF /Tự động hóa công việc với cron và at

Tự động hóa công việc với cron và at

Docker SELF
Mức độ , Bài học
Có sẵn

Tự động hóa công việc với cronat

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ư cronat. 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

  1. Mở crontab của bạn để chỉnh sửa:

    crontab -e
    
  2. 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.

  3. 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ờ:

  1. Viết một script:

    #!/bin/bash
    tar -czf /backup/logs_$(date +\%Y-\%m-\%d).tar.gz /var/logs
  2. Đặ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%:

  1. 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
  2. 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

  1. 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
    
  2. Kiểm tra danh sách công việc:

    atq
    
  3. 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 cronat

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ề cronat 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!

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION