Công việc Cron là gì và bạn sử dụng chúng như thế nào? – Đám mây CNTT

Đồng hồ và thời gian
Tetiana Yurchenko / Shutterstock

Tiện ích cron được sử dụng để chạy các tập lệnh và lệnh theo các khoảng thời gian đều đặn và vào các thời điểm và ngày cụ thể. Nó được tích hợp vào hầu hết các bản phân phối Linux và cung cấp một cách rất hữu ích để lên lịch các tác vụ trên máy chủ của bạn.

cron là một công cụ tự động hóa, vì vậy mọi thứ bạn chạy một cách thường xuyên đều có thể được chuyển sang công việc định kỳ. Nếu bạn muốn thực hiện sao lưu hàng ngày thường xuyên hoặc khởi động lại dịch vụ mỗi tuần một lần, cron có thể làm điều đó.

Cron hoạt động như thế nào?

Công việc cron được định nghĩa trong một tệp gọi là crontab. Tập tin này là duy nhất cho mỗi người dùng và trong khi họ thường nằm dưới / var / spool / cron / crontabs, họ không có ý định chỉnh sửa trực tiếp. Thay vào đó, bạn chỉnh sửa chúng thông qua lệnh crontab:

crontab -e

Điều này sẽ mở người dùng của bạn crontab trong trình soạn thảo văn bản CLI mặc định của bạn. Nếu điều này khiến bạn bị mắc kẹt trong vim, bạn có thể thay đổi trình chỉnh sửa mặc định bằng cách chạy trình chỉnh sửa chọn trên một số hệ thống hoặc bằng cách thêm xuất VISUAL = micro; vào ~ / .bashrc (hoặc shell tương đương) của bạn.

Theo mặc định, crontab của bạn có khả năng trống, do đó, bạn sẽ phải thêm các công việc theo cách thủ công. Một công việc định kỳ thường được định dạng là:

phút giờ ngày tháng tháng ngày trong tuần

Lệnh để thực thi có thể là bất cứ điều gì, bao gồm các kịch bản shell

Các giá trị cho mỗi biến thời gian có thể là ký tự đại diện, mà cron sẽ diễn giải là luôn luôn đúng. Ví dụ: nếu bạn muốn chạy một công việc mười lăm phút mỗi giờ, mỗi ngày, bạn sử dụng:

Lệnh 15 * * * *

Điều này sẽ chạy vào phút 15 mỗi giờ, mỗi ngày, mỗi tháng, bất kể ngày trong tuần.

Nếu bạn muốn điều hành công việc vào lúc 5:30 chiều vào mỗi thứ Sáu, bạn hãy sử dụng:

Lệnh 30 17 * * 5

cron cũng hỗ trợ các giá trị trong phạm vi và bước. Các giá trị nằm trong phạm vi bao gồm mọi giá trị trong một phạm vi cụ thể. Nếu bạn muốn chạy một công việc mỗi giờ trong khi bạn làm việc, bạn sử dụng:

Lệnh 0 9-17 * * 1-5

Từ 9 giờ sáng đến 5 giờ chiều, từ thứ Hai đến thứ Sáu. Tương tự, bạn có thể xác định danh sách các giá trị bằng cách tách chúng bằng dấu phẩy.

Các giá trị bước chạy ở các khoảng thời gian cụ thể hơn. Bạn có thể chạy công việc cứ sau hai giờ bằng cách sử dụng:

Lệnh 0 * / 2 * * *

Hãy nhớ rằng đồng hồ bắt đầu lúc nửa đêm, 00:00. Công việc của bạn sẽ chạy một lần sau đó, sau đó lúc 2 giờ sáng, sau đó lúc 4 giờ sáng và cứ thế.

Một số phiên bản của cron hỗ trợ nhiều cú pháp hơn, chẳng hạn như @daily để chạy mỗi ngày một lần hoặc @reboot để chạy trên mỗi lần khởi động lại, mặc dù bản phân phối của bạn có thể khác nhau.

Nếu bạn muốn một cách dễ dàng để gỡ lỗi cú pháp cron, có nhiều trình soạn thảo trực tuyến như crontab.guru điều đó sẽ cho bạn thấy biểu thức lịch trình của bạn có ý nghĩa gì trong các điều khoản của giáo dân, tức là ở phút 0 qua mỗi 2 giờ.

Làm cho chắc chắn Cron đang làm việc

Cron doesn lồng cho bạn thấy bất kỳ dấu hiệu nào cho thấy nó chạy việc của bạn. Nếu bạn muốn biết nó có hoạt động hay không, bạn sẽ cần chuyển hướng đầu ra theo cách thủ công. Bạn có thể làm điều này bằng cách dẫn đầu ra tới một tệp nhật ký:

* * * * * echo “kiểm tra” >> logfile 2> & 1

Toán tử >> nối thêm đầu ra vào một tệp và toán tử 2> & 1 đảm bảo bao gồm stderr trong đầu ra. Tương đương bash sẽ chỉ là & >> thay cho >>, nhưng điều đó có thể không hoạt động trên mọi bản phân phối, vì cron sử dụng / bin / sh theo mặc định.

Cron có thể được cấu hình để gửi email với đầu ra của công việc. Nó thực sự làm điều này theo mặc định với địa chỉ email mặc định của tài khoản người dùng của bạn, nhưng có khả năng nó không được cấu hình đúng. Để email hoạt động, bạn sẽ cần một tác nhân thư được thiết lập và định cấu hình trên máy chủ của mình, điều này sẽ cho phép bạn sử dụng lệnh thư để gửi email. Sau đó, đặt dòng này lên trên công việc định kỳ của bạn trong công việc định kỳ của bạn:

MAILTO = “yourname @ gmail”

Bây giờ, bất kỳ đầu ra nào từ bất kỳ công việc nào đi đến thiết bị xuất chuẩn (ví dụ: đó là đường ống ở đâu đó) sẽ được gửi qua thư đến địa chỉ bạn đã chỉ định. Bạn có thể kiểm tra điều này bằng cách thêm một công việc tạm thời để lặp lại vào thiết bị xuất chuẩn mỗi phút:

* * * * * echo “cron mail đang hoạt động!”

Chỉ cần đảm bảo tắt công việc đó một khi nó đang hoạt động, nếu không nó sẽ gây khó chịu rất nhanh.

Cron sử dụng / bin / sh theo mặc định, không phải Bash

Bạn có thể đang sử dụng một shell khác với những gì cron điều hành công việc của bạn. Bash (/ bin / bash) là một shell phổ biến trên hầu hết các distro và là một triển khai của sh. Tệp / bin / sh là một symlink để thực hiện sh, nhưng nó không phải là bash. Trên các hệ thống dựa trên Debian như Ubuntu và trên macOS, / bin / sh liên kết đến dấu gạch ngang theo mặc định.

Kết quả cuối cùng của sự nhầm lẫn này là các tập lệnh của bạn có thể không chạy giống nhau và biến PATH của bạn (trong số các biến khác) có thể không được cấu hình đúng. Bạn có thể giải quyết vấn đề này theo một số cách và biến thể cron distro của bạn có thể hoạt động khác nhau, vì vậy bạn có thể phải thử một vài:

  • Thêm SHELL = / bin / bash vào đầu crontab của bạn. Bạn cũng có thể phải thêm BASH_ENV = “/ root / .bashrc” để nó đọc hồ sơ bash của bạn.
  • Đặt / bin / bash trước lệnh trong mỗi công việc. Bạn có thể cần đặt biến BASH_ENV ngay cả khi bạn không chuyển sang bash trên toàn cầu.
  • Sử dụng bash shebang #! / Bin / bash ở đầu mỗi tập lệnh. Điều này đòi hỏi bạn phải có mỗi công việc trong tệp script riêng của nó.

Trong mọi trường hợp, bạn nên gỡ lỗi các công việc định kỳ của mình bằng cách đặt chúng chạy trước một vài phút trước khi coi chúng là đáng tin cậy.

Cập nhật thủ công Crontab của bạn

Nếu bạn không phải quản lý crontab của mình thông qua crontab -e, thì bạn có thể sử dụng phương pháp tốt hơn. Lệnh crontab -l sẽ hiển thị nội dung của crontab của bạn và bạn có thể chuyển nó ra một tệp:

crontab -l> my_crontab

Và sau đó tải tệp đó lên một hệ thống khác, và ‘cài đặt nó với:

crontab my_crontab

Bằng cách này, bạn đã thắng được Google gây ra bất kỳ lỗi nào bằng cách chỉnh sửa trực tiếp, vì nó vẫn được tải thông qua cron.



Nguồn HowToGeek

Chúng tôi rất vui khi biết đánh giá của bạn

Leave a reply

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

GiaTot7
Logo
Reset Password