Khái niệm
Crontab Linux là một dịch vụ giúp thực hiện các task được lên lịch sẵn, giúp cải thiện đáng kể hiệu suất làm việc. Vậy làm thế nào để sử dụng Crontab Linux? Bài viết này sẽ hướng dẫn sử dụng Crontab Linux một cách chi tiết nhất.
Một trong những nổi khổ của các sysadmin chắc hẳn là việc phải làm task cả ngày lẫn đêm. Một số task cần phải thực hiện xuyên đêm, hay phải làm vào những ngày cuối tuần. Thế ta phải bỏ thời gian rảnh rỗi mỗi tối để chạy các lệnh, script ngoài giờ sao? Hay lúc nào cũng phải thức đêm để chạy các bản backup hay cập nhật?
Tuy nhiên, hiện nay có hai tiện ích giúp chạy các lệnh, chương trình và task vào những thời gian được định sẵn. Hai dịch vụ cron và at giúp các sysadmin có thể lên lịch cụ thể cho các task. Sau đó chúng sẽ tự động chạy vào những thời gian đó. Dịch vụ at sẽ chỉ định một task chạy một lần duy nhất vào một thời gian xác định. Trong khi đó, cron cho phép lên lịch thực hiện task lặp lại nhiều lần. Thời gian lặp có thể theo ngày, theo tuần, hoặc là hàng tháng.
Cài đặt
Trước khi cài đặt kiểm tra máy chủ đã cài đặt cronjob hay chưa bằng lệnh:
Nếu không hiện gì thì cài đặt bằng lệnh:
Khởi động bằng lệnh:
Kiểm tra cron đã chạy hay chưa bằng lệnh:
Một số lệnh thường dùng:
- Tạo chỉnh sửa file crontab
- Hiện các lệnh đang cho chạy định kì
- Xóa tất cả lệnh đang cho chạy
Sử dụng crond
Cron hoạt động dựa trên các lệnh được chỉ định trong cron table (crontab). Mỗi người dùng, kể cả root, đều có thể có một file cron. Các file này theo mặc định sẽ không tồn tại. Nhưng ta có thể tạo nó trong thư mục /var/spool/cron bằng cách dùng lệnh crontab -e. Ngoài ra, lệnh này cũng có thể được dùng để chỉnh sửa một file cron. Không nên các sử dụng trình editor tiêu chuẩn (như Vi, Vim, Emacs, Nano,…). Bởi vì sử dụng lệnh crontab không chỉ cho phép bạn chỉnh sửa lệnh, nó còn khởi động lại crond daemon khi ta lưu và thoát trình editor. Lệnh crontab sử dụng Vi làm editor cơ bản của nó, vì Vi luôn luôn khả dụng.
Trước khi cấu hình phải nắm dược cấu trúc này:
Như ở trên bạn sẽ thấy rằng lịch biểu của Cron bao gồm 5 phần có thể khai báo hoặc không, cụ thể chúng là:
- phút: giá trị từ 0 đến 59
- giờ: giá trị từ 0 đến 23
- ngày của tháng: từ ngày 1 đến ngày 31
- tháng: từ tháng 1 đến tháng 12
- ngày trong tuần: từ 0 (Chủ nhật) đến 6 (thứ 2)
Nếu không khai báo số cụ thể thì bạn sẽ để *, kí hiệu này thay thế cho tất cả các con số trên. Vậy ví dụ của tôi sẽ có nghĩa là: chạy mã lệnh bash có trong file theo đường dẫn kia vào thời điểm số phút là 20 mà không cần biết là giờ nào, ngày tháng nào và ghi output ra file.
Ngoài dùng * thì có thể dùng những kí hiệu khác với ý nghĩa như sau:
- dùng dấu phẩy ,để thiết lập nhiều số cho nhiều thời điểm. Ví dụ muốn cứ vào phút thứ 20 và 40 lệnh sẽ được chạy:
- dùng dấu xuộc / để chia đều khoảng cách thời gian được chạy. Ví dụ tôi muốn cứ 5 phút quét hệ thống 1 lần để kiểm tra xem có sự bất thường nào không:
- dùng dấu gạch ngang – để chỉ khoảng thời gian. Ví dụ cứ vào 10h30 11h30 12h30 sáng sẽ chạy lệnh:
- Hoặc dùng dấu phẩy “,” để chỉ khung giờ nhất định. Ví dụ cứ vào 9h, 11h, 14h sẽ chạy lệnh:
- Đặc biệt bạn có thể dùng @reboot để chạy lệnh nào đó khi mà server boot lại. Chẳng hạn khởi động một số chương trình không tự khởi động lại được khi server bị reboot:
- Ngoài ra bạn còn có thể dùng các thiết lập đặc biệt khác
- @hourly: chạy hàng giờ vào phút thứ 0
- @daily: chạy hàng ngày vào 00:00
- @monthy: chạy hàng tháng vào 00:00 của ngày đầu tiên của mỗi tháng
- @yearly: chạy hàng năm vào 00:00 của ngày đầu tiên của mỗi năm
Thực hành
Dùng lệnh dưới để mở file crontab rồi thiết lập những lịch biểu của bạn:
Một số ví dụ:
- Xuất ra dòng chữ “Hello World” mỗi xx phút và lưu vào tệp tin txt(Ở đây là mỗi một phút). Dấu “>” là có ý nghĩa là xóa tất cả nội dung hiện có trong đó và thay bằng nội dung mới nhất. Cho ai không muốn xóa các nội dung hiện có trong đó mà chỉ thêm nội dung mới vào cuối dòng thì dùng “>>”.
Kiểm tra bằng đã xuất hiện tệp tin “helloworld.txt” ở thư mục chỉ định hay chưa bằng lệnh:
Ở đây đã xuất hiện tệp tin đã được định sẵn, đọc nội dung trong tệp tin đó bằng lệnh như dưới. Nếu hiện như hình là đã thành công.
- Chạy script để ping một server có IP x.x.x.x nào đó mỗi 22:01 PM mỗi ngày.Và kết quả sẽ gửi email về email abc@xyz.com.
Tạo file có tên là “ping.sh” ở thư mục /tmp với nội dung như sau:
Sau đó đợi đến 22:01 phút và sẽ thấy email thông báo như hình:
- Thực hiện sao lưu dữ liệu ở một thư mục bất kì vào 23:59 chủ nhật mỗi tuần và lưu vào thư mục /tmp/backups:
* Lệnh dd sẽ backup toàn bộ dữ liệu từ phân vùng có tên là “/dev/vda1” sau đó chuyển sang định dang .img nằm ở thư mục chỉ định (/tmp/backups). Để restore dữ liệu thì nhập lệnh:
“dd if = /tmp/backups/partition.img of = /dev/vda1” (tùy theo đường dẫn lưu file .img trên máy cũng như tên phân vùng).
Đến đây đã trình bày xong cơ bản về Cron, tùy vào tình huống thực tế yêu cầu mà bạn có thể tìm hiểu thêm sâu hơn để ứng dụng được.
Cho phép và từ chối cho phép các users chỉ định sử dụng cron
Đầu tiên ta sẽ vào thư mục /etc trên máy với lệnh “cd /etc” sau đó nhập lệnh:
Và ta sẽ thấy hai files là “cron.deny” và “cron.allow” ( nếu chưa có một trong hai file hoặc cả hai thì nhập lệnh “touch cron.deny” hoặc “touch cron.allow” để tạo)
Để cho phép user bất kì sử dụng cron thì ta sẽ nhập lệnh: “echo “username” >> cron.allow ”, ví dụ như ta muốn cho phép user tên là “kuber” thì sẽ nhập như sau:
Tương tự như với từ chối cho phép user nào đó sử dụng cron:
Tiến hành thử bằng cách đăng nhập vào user “kuber” và nhập lệnh “crontab -e”
Nếu hiện như hình là chứng tỏ ta đã từ chối cho phép user đó sử dụng cron thành công!
THAM KHẢO CÁC DỊCH VỤ TẠI VINAHOST:
>> SERVER – COLOCATION – CDN
>> HOSTING
>> WEBSITE
>> TÊN MIỀN
>> SSL