HƯỚNG DẪN Cách sử dụng Cron trên linux/unix

Thảo luận trong 'KIẾN THỨC VPS/SERVER' bắt đầu bởi quyet1990, 11/11/16.

  1. quyet1990

    quyet1990 New Member

    Tham gia ngày:
    22/10/16
    Bài viết:
    220
    Đã được thích:
    0
    Cron là một tiện ích cơ bản được tìm thấy trên hệ thống LinuxUNIX để chạy các tác vụ trong khoảng thời gian định trước. Việc quản trị hệ thống và phát triển các ứng dụng Linux có thể sử dụng cron sẽ giúp tự động hoá và quản lý tác vụ theo định kỳ.

    Sử dụng crontab
    Để xem danh sách các cronjobs của user hiện tại, thực hiện lệnh sau:
    Mã:
    crontab -l
    Ví dụ về kết quả đầu ra như sau:
    Mã:
    */20 * * * * /home/username/bin/rebuild-dns-zones
    */40 * * * * /home/username/bin/delete-session-files >/dev/null 2>&1
    */10 * * * * rm /srv/example.com/app/session/*
    
    Trong ví dụ này, cron thực hiện những việc sau:
    - Chạy script rebuild-dns-zones cứ sau hai mươi phút .
    - Chạy script delete-session-files cứ sau bốn mươi phút, và gửi tất cả kết quả đầu ra, bao gồm các lỗi, vào /dev/null.
    - Xóa tất cả các file trong thư mục /srv/example.com/app/session/ cứ sau mười phút.

    Chúng tôi sẽ tìm hiểu từng khía cạnh của các lệnh trên trong tài liệu này. Để chỉnh sửa file crontab của người dùng hiện hành, thực hiện lệnh sau:
    Mã:
    crontab -e
    Điều này sẽ mở một trình soạn thảo văn bản và cho phép bạn chỉnh sửa các crontab.

    Sử dụng cơ bản cron
    Các mục trong tập tin crontab có một định dạng cụ thể. Mỗi tác vụ được mô tả trên một và chỉ một dòng. Mỗi dòng bắt đầu với một mô tả khoảng thời gian, và kết thúc bằng một lệnh để chạy vào khoảng thời gian đó.

    Bạn có thể chạy bất kỳ script, lệnh với cron.


    Xác định thời gian đối với cron

    Cú pháp của các mục crontab có thể là một chút rắc rối. Mỗi dòng cron bắt đầu với năm kí tự dấu sao*:
    Mã:
    * * * * *
    Theo thứ tự, các dấu sao đại diện:
    • Phút
    • Giờ
    • Ngày trong tháng
    • Tháng
    • Các thứ trong tuần
    Phút được quy định như một số từ 0 đến 59. Giờ được quy định như các số từ 0 đến 23. Ngày trong tháng được quy định như các số từ 1 đến 31. Tháng được quy định như các số từ 1 đến 12. Các thứ trong tuần được quy định như số 0-6, với chủ nhật biểu diễn là số 0.


    Các biểu thức cron đặc biệt

    Cron cũng cung cấp một số các biểu thức cho phép bạn chỉ định khoảng thời gian lặp lại phức tạp hơn. Được trình bày sau đây:
    • Biểu thức */3 trong cột giờ, sẽ chạy tác vụ quy định tại các thời gian là 12:00, 03:00, 06:00, 09:00, 12:00, 03:00, 06:00 và 09:00 trong một ngày
    • Biểu thức */3 trong cột “ngày trong tháng”, sẽ chạy tác vụ quy định vào ngày 3,6,9,12,15,18,21 và 29 của mỗi tháng.
    • Biểu thức , cho phép bạn chỉ định một danh sách các lần lặp lại. Dấu phẩy tách ra không được chứa khoảng trắng. Ví dụ như 2,3 trong cột tháng sẽ chạy một tác vụ trong tháng 2, tháng 3.
    • Biểu thức - xác định một đoạn các giá trị. Ví dụ 2-4 trong cột tháng sẽ chạy một tác vụ trong tháng 2, tháng 3 và tháng 4.
    Các cột trong crontab được tách bằng dấu cách,

    Cú pháp đặc biệt cron
    Cron có một số cú pháp đặc biệt được trình bày như sau:
    @yearly @annually cả hai đều chạy tác vụ quy định vào lúc 12:00 sáng ngày 01 tháng 01 trong mỗi năm. Điều này tương đương với việc xác định thời gian 0 0 1 1 * trên dòng crontab.

    @daily
    @midnight cả hai đều chạy tác vụ mỗi ngày vào lúc 00:00. Điều này tương đương với cú pháp sau: 0 0 * * * trên dòng crontab.

    @monthly chạy tác vụ mỗi tháng một lần, vào ngày 1 lúc 00:00. Điều này tương đương với cú pháp: 0 0 1 * * trên dòng crontab.

    @weekly chạy tác vụ mỗi tuần một lần vào lúc 12:00 sáng chủ nhật. Điều này cũng giống như cú pháp 0 0 * * 0 trên dòng crontab.

    @hourly chạy tác vụ mỗi giờ như (00:00, 01:00, 02:00….). Điều này tương đương với cú pháp : 0 * * * * trên dòng crontab.

    Cú pháp @reboot chạy lệnh cụ thể một lần, lúc bắt đầu lên. Nói chung tác vụ thời gian khởi động (boot-time) được quản lý bởi các script trong các tập tin /etc/inittab.d, nhưng cú pháp @reboot có thể hữu ích cho những người dùng không có quyền truy cập để chỉnh sửa các init script.

    Ví dụ về các mục crontab
    Một số ví dụ về các mục crontab:
    crontab
    Mã:
    45 16 1,15 * * /opt/bin/payroll-bi-monthly 
    45 4 * * 5 /opt/bin/payroll-weekly
    Trong ví dụ đầu tiên, tập tin /opt/bin/payroll-bi-monthly được chạy lúc 4:45 pm (45 16), vào ngày 1 và 15 hàng tháng (1,15). Trong ví dụ thứ hai tập tin /opt/bin/payroll-weekly được chạy lúc 4:45 am (45 4) vào mỗi thứ sáu hàng tuần (4).

    crontab
    Mã:
     
    1 0 * * * /opt/bin/cal-update-daily 
    1 0 */2 * * /opt/bin/cal-update
    Cả hai tác vụ sẽ chạy lúc 12:01 am (1 0). Tập tin /opt/bin/cal-update-daily sẽ chạy mỗi ngày (như 1,2,3,4,5,….). /opt/bin/cal-update sẽ chạy ngày tiếp theo (như 2,4,6,8,10...).

    crontab
    Mã:
    0 * * * * /opt/bin/compress-static-files
    @hourly /opt/bin/compress-static-files
    
    /opt/bin/compress-static-files sẽ chạy ở đầu mỗi giờ (cả 2 dòng lệnh trên đều tương đương nhau)

    Sử dụng nâng cao với Cron
    Chạy các tác vụ với user khác
    Bạn có thể sử dụng cron để thường xuyên chạy các tác vụ với một user khác trên hệ thống. Với quyền root, dùng lệnh sau đây:
    Mã:
    crontab -u www-data -e
    Điều này sẽ cho phép bạn chỉnh sửa các crontab sử dụng user www-data. Bạn có thể chạy các tác vụ với user root, hoặc với bất kì user khác trên hệ thống. Điều này rất hữu ích nếu bạn muốn hạn chế khả năng của script đối với các tập tin.

    Chuyển hướng kết quả đầu ra của tác vụ
    Theo mặc định, cron sẽ gửi email đến hộp thư điện tử của user đã tạo ra các tác vụ. Bất kỳ kết quả hoặc lổi nào cũng sẽ được gửi. Nếu bạn không quan tâm về kết quả đầu ra, bạn có thể chuyển hướng này đến /dev/null. Thêm câu lệnh sau vào cuối mỗi dòng trong tập tin crontab của bạn:
    Mã:
    >/dev/null
    Nếu script của bạn tạo ra một lỗi, cron vẫn sẽ gửi lỗi tới email của bạn. Nếu bạn muốn bỏ qua tất cả các kết quả đầu ra, ngay cả các thông báo lỗi, thêm dòng sau vào cuối các dòng trong tập tin crontab của bạn:
    Mã:
    >/dev/null 2>&1
    Trong khi điều này có thể làm sạch hộp email của bạn khỏi các email không mong muốn, chuyển hướng kết quả đầu ra tất cả vào /dev/null có thể khiến bạn bỏ lỡ các lỗi quan trọng nếu có điều gì sai khi một tác vụ chạy.
     

Chia sẻ trang này

Đang tải...