Cron & crontab, đã giải thích

Lucaine xuất bản một lúc trước đó hướng dẫn tuyệt vời về cron và crontab mà tôi nghĩ là đáng chia sẻ. Cron là một loại tương đương với Nhiệm vụ đã lên lịch trong Windows, chỉ là nó được xử lý từ thiết bị đầu cuối. Những người thích giao diện trực quan để đạt được cùng mục tiêu, có thể xem điều này một mặt hàng khác.

Cron là gì?

Cái tên cron xuất phát từ tiếng Hy Lạp chronos có nghĩa là "thời gian". Trong hệ điều hành Unix, cron là một trình quản lý quy trình nền thông thường (daemon) chạy các tiến trình hoặc tập lệnh theo các khoảng thời gian đều đặn (ví dụ: mỗi phút, ngày, tuần hoặc tháng). Các quy trình phải được thực thi và thời gian chúng phải được thực thi được chỉ định trong tệp crontab.

Como funciona

Daemon cron bắt đầu từ /etc/rc.d/ o /etc/init.d tùy thuộc vào sự phân bố. Cron chạy trong nền, kiểm tra bảng tác vụ crontab mỗi phút / etc / crontab o en / var / spool / cron để tìm kiếm các nhiệm vụ cần hoàn thành. Với tư cách là người dùng, chúng ta có thể thêm lệnh hoặc tập lệnh với các tác vụ vào cron để tự động hóa một số quy trình. Điều này rất hữu ích, chẳng hạn để tự động cập nhật hệ thống hoặc hệ thống sao lưu tốt.

Bài viết liên quan:
Hướng dẫn: Cài đặt Gói .tar.gz và .tar.bz2

Crontab là gì?

Crontab là một tệp văn bản đơn giản lưu trữ danh sách các lệnh sẽ được thực hiện tại một thời điểm do người dùng chỉ định. Crontab sẽ kiểm tra ngày và giờ khi tập lệnh hoặc lệnh sẽ được thực thi, các quyền thực thi và nó sẽ thực hiện nó ở chế độ nền. Mỗi người dùng có thể có tệp crontab của riêng họ, trên thực tế, / etc / crontab nó được giả định là tệp crontab của người dùng root, khi người dùng bình thường (và thậm chí là root) muốn tạo tệp crontab của riêng họ thì chúng tôi sẽ sử dụng lệnh crontab.

Crontab là cách dễ nhất để quản lý các tác vụ cron trên các hệ thống nhiều người dùng, với tư cách là người dùng hệ thống đơn giản hoặc người dùng root.

Sử dụng crontab

Chúng tôi đang bắt đầu với một ví dụ đơn giản.

Chúng tôi sẽ tự động cập nhật hệ thống, để loại bỏ sự phiền phức của việc "Tôi luôn phải cập nhật và tôi không thích điều đó!"

làm thế nào để
Bài viết liên quan:
Các lệnh cần biết hệ thống (xác định cấu hình phần cứng và một số phần mềm)

Trước hết chúng ta sẽ tạo một kịch bản. Tập lệnh này sẽ được gọi bởi cron và sẽ chứa tất cả các hướng dẫn mà chúng ta muốn nó thực hiện, do đó, cần phải kiểm tra nó trong một số trường hợp và theo một số cách trước khi đưa nó vào cron, một tập lệnh cập nhật đơn giản như sau:

#! / bin / bash #script update example #chọn bản phân phối của bạn # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Xóa # khỏi dòng phân phối của bạn. Trong trường hợp đó là Ubuntu / Debian, nó bắt đầu bằng apt-get.

Chúng tôi lưu tập lệnh dưới dạng update.sh (ví dụ: thư mục script ở nhà của bạn). Chúng tôi thay đổi quyền thực thi của tập lệnh đã nói bằng:

chmod a + x ~ / scripts / update.sh

Chúng tôi thực thi tập lệnh một vài lần để xác minh rằng mọi thứ chạy trơn tru, chúng tôi sửa đổi những gì cần thiết (nó không được chứa lỗi, nếu không cron sẽ chỉ lặp đi lặp lại một lỗi). Bây giờ để thêm nhiệm vụ vào crontab của chúng tôi.

Thêm nhiệm vụ vào crontab

Chúng tôi thực thi phiên bản của crontab với crontab -e, trong một số phiên bản (chẳng hạn như Ubuntu), nó cung cấp cho chúng tôi tùy chọn để chọn trình soạn thảo văn bản mà chúng tôi muốn, phần còn lại chúng tôi để lại với vi. Tệp crontab sẽ trông giống như thế này.

# mh dom mon dow lệnh người dùng

trong đó:

  • m tương ứng với phút kịch bản sẽ được thực thi, giá trị nằm trong khoảng từ 0 đến 59
  • h thời gian chính xác, định dạng 24 giờ được xử lý, các giá trị nằm trong khoảng từ 0 đến 23, với 0 là 12 giờ đêm.
  • ban cho đề cập đến ngày trong tháng, ví dụ: bạn có thể chỉ định 15 nếu bạn muốn chạy 15 ngày một lần
  • dow có nghĩa là ngày trong tuần, nó có thể là số (0 đến 7, trong đó 0 và 7 là Chủ nhật) hoặc 3 chữ cái đầu tiên của ngày trong tiếng Anh: mon, tue, wed, thu, fri, sat, sun.
  • người sử dụng xác định người dùng sẽ thực thi lệnh, đó có thể là người chủ hoặc một người dùng khác miễn là họ có quyền thực thi tập lệnh.
  • lệnh đề cập đến lệnh hoặc đường dẫn tuyệt đối của tập lệnh để thực thi, ví dụ: /home/usuario/scripts/update.sh, nếu nó gọi một tập lệnh thì nó phải thực thi được

Để làm rõ một vài ví dụ về các tác vụ cron được giải thích:

15 10 * * * người dùng /home/user/scripts/update.sh

Nó sẽ chạy tập lệnh update.sh lúc 10:15 sáng hàng ngày

15 22 * * * người dùng /home/user/scripts/update.sh

Nó sẽ chạy tập lệnh update.sh lúc 10:15 tối hàng ngày

00 10 * * 0 root apt-get -y cập nhật Người dùng gốc

Nó sẽ chạy cập nhật vào Chủ nhật hàng tuần lúc 10:00 sáng

45 10 * * sun root apt-get -y cập nhật

Người dùng root sẽ chạy bản cập nhật vào Chủ nhật (CN) lúc 10:45 sáng

30 7 20 11 * người dùng /home/usuario/scripts/updata.sh

Vào ngày 20 tháng 7 lúc 30:XNUMX, người dùng sẽ chạy tập lệnh

30 7 11 11 sun user /home/usuario/scripts/pastel_con_velitas.sh

Vào ngày 11 tháng 7 lúc 30:XNUMX sáng và đó là Chủ nhật, người dùng sẽ ăn mừng sysadmin của mình (đó là tôi)

01 * * * * người dùng /home/usuario/scripts/molestorecordatorio.sh

Một lời nhắc nhở khó chịu mỗi phút mỗi giờ mỗi ngày (KHÔNG khuyến khích).

Chúng vẫn có thể được xử lý phạm vi đặc biệt:

30 17 * * 1,2,3,4,5

Vào 5h30 chiều các ngày từ thứ Hai đến thứ Sáu.

00 12 1,15,28 * *

Vào lúc 12 giờ trưa các ngày 28, XNUMX và XNUMX hàng tháng (lý tưởng để trả lương)

Nếu điều này gây nhầm lẫn, crontab sẽ xử lý các chuỗi đặc biệt để xác định các phạm vi này.

@reboot Chạy một lần, khi khởi động
@yearly chỉ chạy mỗi năm một lần: 0 0 1 1 *
@annual giống với @yearly
@monthly chạy mỗi tháng một lần, ngày đầu tiên: 0 0 1 * *
@weekly Weekly phút đầu tiên của giờ đầu tiên trong tuần. 0 0 * * 0 ″.
@daily hàng ngày, lúc 12:00 A.M. 0 0 * * *
@midnight giống như @daily
@ giờ vào phút đầu tiên của mỗi giờ: 0 * * * *

Việc sử dụng nó rất đơn giản.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y nâng cấp

Cuối cùng nhưng không kém phần quan trọng:

Quản lý công việc Cron

tệp crontab

Thay thế tệp crontab hiện có bằng tệp do người dùng xác định

-e crontab

Chỉnh sửa tệp crontab của người dùng, mỗi dòng mới sẽ là một tác vụ crontab mới.

crontab -l

Liệt kê tất cả các tác vụ crontab của người dùng

crontab -d

Xóa crontab của người dùng

thư mục crontab -c

Xác định thư mục crontab của người dùng (thư mục này phải có quyền ghi và thực thi của người dùng)

người dùng crontab -u

tiền tố để xử lý crontab của người dùng khác, ví dụ:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user

Công cụ này, giống như nhiều công cụ khác, có thể được nhìn thấy sâu hơn và chi tiết hơn trong:

Cảm ơn Lucain!