Cách chỉnh sửa tệp Crontab Linux để lên lịch công việc

Giới thiệu

Có một daemon trong Linux được gọi là cron được sử dụng để chạy các quy trình trong khoảng thời gian đều đặn.

Cách thực hiện điều này là kiểm tra các thư mục nhất định trên hệ thống của bạn để chạy các tập lệnh. Ví dụ: có một thư mục có tên /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly và /etc/cron.monthly. Ngoài ra còn có một tập tin gọi là / etc / crontab.

Theo mặc định, bạn có thể chỉ cần đặt tập lệnh vào các thư mục có liên quan để làm cho chúng chạy một khoảng thời gian đều đặn.

Ví dụ mở một cửa sổ đầu cuối (bằng cách nhấn CTRL, ALT và T) và chạy lệnh ls sau:

ls / etc / cron *

Bạn sẽ thấy danh sách các chương trình hoặc tập lệnh được chạy hàng giờ, hàng ngày, hàng tuần và hàng tháng.

Vấn đề với các thư mục này là chúng hơi mơ hồ. Ví dụ: hàng ngày có nghĩa là tập lệnh sẽ chạy mỗi ngày một lần nhưng bạn không thể kiểm soát thời gian tập lệnh sẽ chạy trong ngày đó.

Đó là nơi tập tin crontab xuất hiện.

Bằng cách chỉnh sửa tệp crontab, bạn có thể nhận được một tập lệnh hoặc chương trình để chạy vào ngày và giờ chính xác mà bạn muốn nó chạy. Ví dụ: có thể bạn muốn sao lưu các tệp của mình mỗi tối vào lúc 6 giờ tối.

Quyền

Lệnh crontab yêu cầu người dùng có quyền chỉnh sửa tệp crontab. Về cơ bản có hai tệp được sử dụng để quản lý quyền crontab:

Nếu tệp /etc/cron.allow tồn tại thì người dùng muốn chỉnh sửa tệp crontab phải nằm trong tệp đó. Nếu tệp cron.allow không tồn tại nhưng có tệp /etc/cron.deny thì người dùng không được tồn tại trong tệp đó.

Nếu cả hai tệp tồn tại thì /etc/cron.allow sẽ ghi đè tệp /etc/cron.deny.

Nếu không có tệp nào tồn tại thì nó phụ thuộc vào cấu hình hệ thống cho dù người dùng có thể chỉnh sửa crontab hay không.

Người dùng root luôn có thể chỉnh sửa tệp crontab. Bạn có thể sử dụng lệnh su để chuyển sang người dùng root hoặc lệnh sudo để chạy lệnh crontab.

Chỉnh sửa tệp Crontab

Mỗi người dùng có quyền có thể tạo tệp crontab của riêng họ. Lệnh cron về cơ bản tìm kiếm sự tồn tại của nhiều tệp crontab và chạy qua tất cả chúng.

Để kiểm tra xem bạn có tệp crontab hay không, hãy chạy lệnh sau:

crontab -l

Nếu bạn không có tệp crontab thì thông báo "no crontab cho " sẽ xuất hiện nếu không tệp crontab của bạn sẽ được hiển thị (chức năng này khác với hệ thống, đôi khi nó hiển thị không có gì và hiển thị lần khác " không chỉnh sửa tệp này ").

Để tạo hoặc chỉnh sửa tệp crontab, hãy chạy lệnh sau:

crontab -e

Theo mặc định nếu không có trình soạn thảo mặc định nào được chọn thì bạn sẽ được yêu cầu chọn một trình soạn thảo mặc định để sử dụng. Cá nhân tôi thích sử dụng nano vì nó khá thẳng về phía trước để sử dụng và nó chạy từ thiết bị đầu cuối.

Tệp mở ra có rất nhiều thông tin nhưng phần quan trọng là ví dụ ngay trước phần cuối của phần chú thích (các chú thích được biểu thị bằng các dòng bắt đầu bằng #).

# mh dom mon dow lệnh

0 5 * * 1 tar -zcf /var/backups/home.tgz / home /

Có 6 mẩu thông tin để phù hợp với mỗi dòng của tệp crontab:

Đối với mỗi mục (ngoại trừ lệnh) bạn có thể chỉ định ký tự đại diện. Nhìn vào dòng crontab ví dụ sau:

30 18 * * * tar -zcf /var/backups/home.tgz / home /

Những gì lệnh trên nói là 30 phút, 18 giờ và bất kỳ ngày nào, tháng và ngày trong tuần chạy lệnh để néntar thư mục chính vào thư mục / var / backups.

Để có được một lệnh để chạy ở 30 phút qua mỗi giờ tôi có thể chạy lệnh sau:

Lệnh 30 * * * *

Để có được một lệnh để chạy mỗi phút qua 6 giờ chiều, tôi có thể chạy lệnh sau:

* 18 * * * lệnh

Do đó bạn phải cẩn thận về việc thiết lập các lệnh crontab của bạn.

Ví dụ:

* * * 1 * lệnh

Lệnh trên sẽ chạy mỗi phút mỗi giờ mỗi ngày trong mỗi tuần vào tháng Giêng. Tôi nghi ngờ đó là những gì bạn muốn.

Để chạy lệnh lúc 5 giờ sáng ngày 1 tháng 1, bạn sẽ có lệnh sau vào tệp crontab:

0 5 1 1 * lệnh

Làm thế nào để loại bỏ một tập tin Crontab

Hầu hết thời gian bạn sẽ không muốn xóa tệp crontab nhưng bạn có thể muốn xóa một số hàng khỏi tệp crontab.

Tuy nhiên nếu bạn muốn xóa tệp crontab của người dùng, hãy chạy lệnh sau:

crontab -r

Cách an toàn hơn để thực hiện việc này là chạy lệnh sau:

crontab -i

Điều này đặt câu hỏi "bạn có chắc không?" trước khi xóa tệp crontab.