Cách lập lịch tác vụ trong Linux với Cron và Crontab

Cách lập lịch tác vụ trong Linux với Cron và Crontab

Bạn có biết rằng Blade Runner được thiết lập vào năm 2019? Đó là ba năm kể từ bây giờ! Chưa kể Back to the Future 2 , nơi họ du hành thời gian về phía trước vào năm 2015. Tuy nhiên, chúng tôi không có ô tô bay và không có bản sao giữa chúng tôi (theo như tôi biết).





Thật dễ dàng để cảm thấy thất vọng với công nghệ hiện tại khi chúng ta so sánh nó với những mô tả hư cấu về tương lai. Tuy nhiên, ngày nay điện thoại, máy tính và thậm chí cả ngôi nhà của chúng ta có thể làm được những điều đáng kinh ngạc. Khả năng tự động hóa các tác vụ là một trong số đó.





Mọi người dùng Linux đều có thể hưởng lợi từ việc lập lịch các tác vụ, cho dù chúng liên quan đến hệ thống (như dọn dẹp nhật ký cũ và cập nhật các gói ) hoặc phục vụ người dùng (kiểm tra email, tải podcast ...). Người dùng Windows đã có Task Scheduler kể từ Windows 95. Tiện ích thực hiện công việc tương tự trên Linux được gọi là cron và ở đây chúng tôi sẽ giải thích cách sử dụng nó.





Apple Airpods có hoạt động với Android không

Cron là gì?

Cron là một dịch vụ hệ thống chạy ở chế độ nền, kiểm tra các tác vụ đã lên lịch và thực thi chúng nếu tìm thấy bất kỳ tác vụ nào. Các tác vụ - còn được gọi là 'cron job' - được định nghĩa trong các tệp cấu hình đặc biệt (crontabs), cron sẽ quét mỗi phút. Một số phiên bản của cron có thể được tìm thấy trên các bản phân phối Linux khác nhau. Ví dụ: fork của Fedora của cron được gọi là cronie , và cũng có fcron , bcron , và dcron . Một số có các tính năng bổ sung, trong khi những tính năng khác tập trung hơn vào bảo mật, nhưng tất cả chúng đều dựa trên cùng một ý tưởng.

Hướng dẫn này được viết cho vixie-cron, đây là phiên bản phổ biến nhất của cron và là phiên bản bạn sẽ tìm thấy trên Ubuntu và các dẫn xuất của nó. Mặc dù hầu hết các hướng dẫn cũng áp dụng cho các triển khai cron khác, nhưng có thể có những khác biệt nhỏ, vì vậy hãy kiểm tra hướng dẫn sử dụng của chúng nếu bạn quyết định chuyển đổi.



Crontab là gì?

Nếu bạn nghiêm túc về việc quản lý thời gian của mình, bạn có thể có một loại lịch nào đó - một ứng dụng hoặc ít nhất là một tờ giấy. Crontab rất giống lịch trên máy tính của bạn. Nó giữ thông tin về các tác vụ đã lên lịch, cho cron biết lệnh nào sẽ chạy vào thời điểm nào.

Trên thực tế, một số crontabs có trên hệ thống của bạn. Mỗi người dùng đều có crontab của riêng họ, bao gồm cả root (quản trị viên). Crontabs của người dùng được lưu trữ trong





/var/spool/cron/crontabs/

. Các

crontab -l

lệnh sẽ liệt kê tệp crontab cho người dùng hiện tại. Bạn có thể kiểm tra crontab gốc bằng





sudo crontab -l

.

Ngoài ra, có tệp crontab hệ thống

/etc/crontab

được sử dụng cho các tác vụ trên toàn hệ thống. Thông thường, chúng có dạng các tập lệnh thực thi, thuộc sở hữu gốc được đặt trong

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, và

/etc/cron.monthly/

và trên một số bản phân phối,

/etc/cron.d/

thư mục nữa. Nói chung, bạn không cần phải xử lý những tác vụ này, vì hầu hết chúng được tạo tự động bởi các ứng dụng đã cài đặt.

Cách lập lịch công việc với Cron

Nghe có vẻ đơn giản: để lên lịch tác vụ, chỉ cần thêm chúng vào crontab của bạn. Vì crontab là một tệp cấu hình đặc biệt, bạn không nên chỉnh sửa nó theo cách thủ công. Thay vào đó, hãy sử dụng

crontab -e

chỉ huy. Để chỉnh sửa root hoặc crontabs của người dùng khác, hãy chạy lệnh với đặc quyền quản trị và thêm tên người dùng của họ sau tùy chọn -u:

sudo crontab -u root -e
sudo crontab -u username -e

Tệp crontab có hai phần. Cái đầu tiên chứa các biến môi trường được thiết lập tự động. Bạn có thể thay đổi các biến PATH, HOME và SHELL một cách an toàn và sửa đổi biến MAIL.

Phần thứ hai của tệp là 'thời gian biểu' thực tế với các nhiệm vụ đã lên lịch của bạn. Mỗi tác vụ chiếm một dòng (hàng) trong bảng, với các cột đại diện cho các giá trị sau:

Để lập lịch tác vụ thành công, bạn cần biết một chút về cú pháp crontab:

  • Các số phải là số nguyên (số nguyên) và bạn có thể sử dụng dấu hoa thị (*) trong bất kỳ cột nào dưới dạng ký tự đại diện, có nghĩa là 'mỗi phút / ngày / tháng ...'.
  • Trong cột 'Ngày trong tháng', hãy cẩn thận không đặt ngày không xảy ra trong tháng được chỉ định trong cột 'Tháng' (ví dụ: ngày 30 tháng 2).
  • Cả hai cột 'Tháng' và 'Ngày trong Tuần' đều chấp nhận tên ngắn cho tháng và ngày tương ứng và chúng không phân biệt chữ hoa chữ thường.
  • Trong cột 'Ngày trong tuần', cả 0 và 7 đều đại diện cho Chủ nhật. Cột 'Giờ' yêu cầu định dạng 'giờ quân sự' (24 giờ), nhưng bạn không thể sử dụng số 24 - thay vào đó, 0 là viết tắt của 12 giờ sáng Điều này là do các giá trị cho phút, giờ và ngày trong tuần bắt đầu ở 0 thay vì 1.
  • Giây không được hỗ trợ, vì vậy bạn không thể lên lịch tác vụ vào một giây cụ thể.

Những gì bạn có thể làm là lập lịch các phạm vi thời gian bao gồm bằng dấu gạch ngang (14-22 trong 'Giờ' sẽ chạy tác vụ liên tục từ 2 giờ chiều đến 10 giờ tối) hoặc chạy một tác vụ đơn lẻ nhiều lần bằng cách xác định danh sách được phân tách bằng dấu phẩy (1, 3,5 trong 'Ngày trong tuần' sẽ chạy nhiệm vụ vào Thứ Hai, Thứ Tư và Thứ Sáu).

Trong khi đó, giá trị bước, được biểu thị bằng dấu gạch chéo lên (/) và những giá trị này cho biết số lượng bỏ qua trong một phạm vi; ví dụ: 3-20 / 3 trong phần 'Giờ' sẽ chạy tác vụ ba giờ một lần từ 3 giờ sáng đến 8 giờ tối. Điều này rất hữu ích khi bạn muốn lặp lại các công việc sau mỗi X giờ, vì bạn có thể kết hợp dấu hoa thị và một bước (* / X). Bạn có thể kết hợp phạm vi với danh sách và các bước với phạm vi miễn là bạn đang sử dụng số. Nói cách khác, các kết hợp như 'jan-mar' hoặc 'Tue, Fri-Sun' không được phép.

Ngoài ra, thay vì đặt giá trị cho mọi cột, bạn chỉ có thể viết @weekly, @yearly, @monthly, @daily hoặc @hourly ở đầu hàng, sau đó là một lệnh. Được lên lịch như vậy, các tác vụ sẽ chạy ở trường hợp đầu tiên có thể, vì vậy @weekly sẽ chạy vào lúc nửa đêm của ngày đầu tiên trong tuần. Nếu bạn muốn chạy một tác vụ ngay lập tức khi hệ thống (lại) khởi động, hãy sử dụng lệnh @reboot.

Trong ví dụ này, chúng tôi đã lên lịch sao lưu hàng ngày vào lúc 08:20 và 20:20. Hình nền tự động thay đổi ba ngày một lần vào lúc 19:00 và một tập lệnh sẽ kiểm tra các podcast mới vào thứ Hai hàng tuần lúc 10:20 và 20:20. Lời nhắc sinh nhật được đặt cho ngày 25 tháng 3 và sẽ chạy 30 phút một lần trong khung thời gian đã chỉ định. Cuối cùng, một tập lệnh kiểm tra email 15 phút một lần từ 8 đến 20, nhưng chỉ vào các ngày làm việc. Bạn có thể tự do sắp xếp crontab của mình với khoảng trắng và tab giữa các cột, nhưng không nằm trong chúng (không đặt dấu cách giữa dấu phẩy, dấu gạch ngang và dấu gạch chéo).

Nếu tất cả những điều này nghe có vẻ quá phức tạp, đừng lo lắng - bạn luôn có thể dựa vào internet. Các công cụ như Máy phát điện Crontab , Crontab.guru và Corntab giúp bạn tạo các công việc cron mà không cần biết bất kỳ cú pháp crontab nào. Chúng cho bạn biết khi nào công việc sẽ chạy tiếp theo và cung cấp các mẫu cho các biểu thức thường được sử dụng. Crontab.guru là ứng dụng tốt nhất trong số đó vì nó cho phép bạn kiểm tra trực tiếp cú pháp crontab, vì vậy bạn có thể ngay lập tức thấy những thay đổi của mình sẽ ảnh hưởng đến lịch trình như thế nào.

Cách kiểm tra xem công việc Cron có được thực hiện hay không

Cron được cho là sẽ chạy nhẹ nhàng trong nền và cho phép bạn làm việc không bị quấy rầy trong khi nó thực hiện các nhiệm vụ của bạn. Nhưng làm thế nào bạn có thể chắc chắn rằng nó thực sự hoạt động?

Cron có một tính năng thông báo email tích hợp, nhưng điều này yêu cầu thiết lập ít nhất một máy chủ thư cục bộ đơn giản. Không có nhiều người dùng gia đình sẵn sàng cấu hình điều này và không nhiều bản phân phối cung cấp nó theo mặc định (ví dụ: Ubuntu thì không). Cách nhanh nhất để kiểm tra cron là quét nhật ký hệ thống bằng lệnh sau:

cat /var/log/syslog | grep -i cron

Tùy chọn -i làm cho truy vấn của chúng tôi không phân biệt chữ hoa chữ thường. Có thể cron sẽ có tệp nhật ký của riêng nó ở đâu đó trong

/var/log/

, vì vậy hãy nhìn vào đó nếu lệnh này không tạo ra kết quả hữu ích.

Nếu bạn cần lưu kết quả đầu ra của một công việc cron cụ thể, bạn có thể chuyển hướng nó đến một tệp. Cung cấp đường dẫn và tên của tệp trong cột cuối cùng của crontab của bạn, sau lệnh bạn muốn chạy:

30 * * * * /usr/bin/yourcommand > /home/username/logfile.txt

Việc sử dụng một biểu tượng> sẽ ghi đè lên tệp mỗi khi lệnh chạy. Để tránh điều này, hãy sử dụng >> thay vào đó - nó gắn kết quả đầu ra vào tệp hiện có.

Nếu Cron không hoạt động thì sao?

Có thể xảy ra trường hợp bạn đã thêm một số tác vụ, kiểm tra nhật ký hệ thống và nhận thấy rằng chúng không thực thi như bình thường. Dưới đây là một số điều bạn nên xem xét - và cẩn thận - khi cố gắng khắc phục sự cố.

Dịch vụ cron có đang chạy không?

Như bạn đã biết, trình nền cron sẽ chạy ở chế độ nền. Hãy chắc chắn rằng đây thực sự là trường hợp. Dịch vụ này được gọi là crond hoặc chỉ là cron.

Đối với các bản phân phối sử dụng systemd:

systemctl status cron

Đối với các bản phân phối sử dụng Upstart:

service cron status

Nếu bản phân phối của bạn đang sử dụng phương pháp tiếp cận System V init 'cũ', hãy liệt kê tất cả các dịch vụ có:

cách tạo một tài khoản instagram khác
initctl list

và xem liệu cron có được liệt kê hay không.

Bạn thậm chí được phép có một tệp crontab?

Kiểm tra của bạn

/etc

thư mục cho các tệp có tên

cron.allow

cron.deny

. Trên Ubuntu, không nên tồn tại, có nghĩa là tất cả người dùng được phép quản lý các công việc cron. Tuy nhiên, nếu có

đặt lại mật khẩu facebook bằng câu hỏi bảo mật
cron.allow

tệp, nó phải chứa tên người dùng của bạn. Ngược lại, nếu

cron.deny

tệp tồn tại, tên người dùng của bạn không nên ở trong đó. Bỏ rơi

cron.deny

tệp trống có nghĩa là chỉ người dùng gốc và người dùng được liệt kê trong

cron.allow

có thể có các tệp crontab.

Các biến của bạn có được đặt đúng cách không?

Crontab tự động đặt biến SHELL của bạn thành

/bin/sh

. Tuy nhiên, nếu sự lựa chọn của bạn là cá hoặc bash, bạn nên thay đổi biến SHELL

. Tương tự như vậy, biến PATH chỉ chứa một số thư mục theo mặc định. Đây là nơi crontab tìm kiếm các lệnh Linux. Nếu công việc cron của bạn không chạy, có thể là do crontab không 'nhìn thấy' lệnh bạn đã sử dụng. Để tránh điều này, hãy thêm thư mục chứa các lệnh vào biến PATH, được phân tách bằng dấu hai chấm:

PATH = / opt / myapp / bin: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin

Nếu bạn không muốn chỉnh sửa điều này trong crontab của mình, bạn có thể xác định các biến này trong tập lệnh mà bạn muốn chạy như một công việc cron.

Định dạng crontab của bạn có đúng không?

Cú pháp Crontab không chính xác thuận buồm xuôi gió. Ngay cả khi bạn xác minh nó bằng các công cụ trực tuyến đã đề cập trước đây, một sai sót nhỏ vẫn có thể ngăn cron thực hiện công việc của bạn. Hãy cẩn thận:

  • thêm một dòng trống ở cuối tệp crontab
  • thoát khỏi dấu% với một dấu gạch chéo ngược nếu lệnh của bạn bao gồm nó
  • viết nhận xét dưới dạng các dòng riêng biệt bắt đầu bằng #. Không viết các nhận xét trên cùng một dòng với các biến môi trường hoặc bên cạnh các lệnh cron job.

Bạn có thực sự phải sử dụng thiết bị đầu cuối không?

Tuyệt đối không. Người dùng KDE có thể lên lịch các công việc cron với KCron, có thể truy cập từ Cài đặt hệ thống> Bộ lập lịch tác vụ mô-đun. Với giao diện đơn giản cho phép bạn chọn và chỉnh sửa mọi thứ chỉ trong vài cú nhấp chuột, KCron rất vui khi sử dụng.

Nếu bạn thích GNOME, thì Lịch biểu GNOME Dành cho bạn. Cách tiếp cận tương tự, mặc dù giao diện, dự kiến, hơi khác một chút. Nó cung cấp một chế độ nâng cao cho các sửa đổi chi tiết và đi kèm với một ứng dụng bảng điều khiển mà từ đó bạn có thể quản lý các tác vụ trực tiếp.

Bạn nên biết các giải pháp khác, như Crontab-UIMinicron . Chúng phù hợp hơn cho những người dùng quản lý nhiều máy và công việc cron và một trong những tính năng thú vị nhất của chúng là giao diện dựa trên web.

Có bất kỳ lựa chọn thay thế Cron nào không?

Trong khi cron là công cụ lập lịch tác vụ tiêu chuẩn cho Linux, nó chắc chắn không phải là công cụ duy nhất. Các theo lệnh hoàn hảo cho các công việc nhanh chóng, một lần có thể được lên lịch ngay từ dòng lệnh mà không cần tệp cấu hình đặc biệt. Nếu bạn cần thêm, có GNUbatch , giới thiệu khái niệm về sự phụ thuộc. Với GNUbatch, bạn có thể đặt các điều kiện cụ thể cho mọi công việc hoặc thực hiện một nhiệm vụ đã lên lịch phụ thuộc vào một công việc trước đó. Điều gì đó tương tự có thể đạt được với hệ thống hẹn giờ . Mặc dù cấu hình ít thực tế hơn cron, bộ định thời systemd có thể nhớ nếu một tác vụ bị lỡ lịch trình của nó khi máy tính đang tắt và chạy nó vào lần tiếp theo khi nó được bật.

Đây là điều mà cron không thể làm một mình. Do đó, nó phù hợp với các máy chủ và máy tính liên tục chạy, nhưng nó sẽ không thực hiện công việc đã được lên lịch khi máy tính đang tắt. Đây là đâu anacron đến chơi. Về mặt kỹ thuật, nó không phải là một 'thay thế' hoặc một sự thay thế cho cron. Thay vào đó, anacron bổ sung cho cron và nên được sử dụng cùng với nó, đây là trường hợp trên nhiều bản phân phối Linux, bao gồm cả Ubuntu và các sản phẩm dựa trên Ubuntu. Anacron ghi nhật ký khi một tác vụ được thực thi lần cuối và kiểm tra xem có bất kỳ trường hợp nào bị bỏ lỡ trong khi hệ thống tắt nguồn hay không. Nó sẽ chạy chúng khi bạn bật lại máy tính, nhưng mọi tác vụ chỉ có thể được thực hiện một lần mỗi ngày.

Một số phiên bản của cron, như fcron, cung cấp các tính năng của anacron theo mặc định. Người dùng nâng cao có thể muốn xem Hcron hoặc SuperCron , mang lại nhiều cải tiến cho các chức năng cron cơ bản, nhưng cũng hơi khó quản lý.

Còn bạn thì sao? Bạn tổ chức các nhiệm vụ kỹ thuật số của mình như thế nào? Bạn lên lịch cho những tác vụ nào trên Linux? Chia sẻ những câu chuyện và mẹo sử dụng cron của bạn trong phần bình luận.

Tín dụng hình ảnh: bảng lịch trình bởi Gonzalo Aragon qua Shutterstock

Đăng lại Đăng lại tiếng riu ríu E-mail 12 trang web video tốt hơn YouTube

Dưới đây là một số trang video thay thế cho YouTube. Mỗi mục đều chiếm một vị trí thích hợp khác nhau, nhưng đều đáng để thêm vào dấu trang của bạn.

Đọc tiếp
Chủ đề liên quan
  • Linux
  • Linux
Giới thiệu về tác giả Ivana Isadora Devcic(24 bài báo đã xuất bản)

Ivana Isadora là một nhà văn và dịch giả tự do, người yêu Linux và fangirl KDE. Cô ấy ủng hộ và quảng bá phần mềm nguồn mở và miễn phí, đồng thời cô ấy luôn tìm kiếm các ứng dụng mới, sáng tạo. Tìm hiểu cách liên lạc ở đây .

Xem thêm từ Ivana Isadora Devcic

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký