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!

Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   Hình ảnh trình giữ chỗ Alvaro Ortiz dijo

    Ugh… hơi khó hiểu.

  2.   thuốc bổ dijo

    * / 30 bị thiếu (trong trường phút) chạy cứ sau 30 phút ...

    1.    erm3nda dijo

      Chỉ điều này tôi sẽ nhận xét cho đến khi tôi quyết định xem xét các ý kiến ​​😀
      Bổ ngữ này là một phần thông tin rất quan trọng và một cái gì đó rất hữu ích.

      1.    Kika dijo

        Hello!
        Hiện tại, tôi đang kiểm tra cấu hình cứ sau 45 phút.

        * / 45 * * * *, và lệnh được thực hiện vào 45 phút mỗi giờ VÀ mỗi giờ. Điều đó có nghĩa là:

        Nó chạy lúc 3:45, sau đó 4:00, 4:45, sau đó 5:00, 5:45, 6:00, 6:45, v.v.

        Tôi có điều gì không ổn? Tôi có thể làm gì để chỉ có 45 phút một lần, hoặc ít nhất một lần vào 45 phút mỗi giờ.

    2.    Kika dijo

      Hello!
      Hiện tại, tôi đang kiểm tra cấu hình cứ sau 45 phút.

      * / 45 * * * *, và lệnh được thực hiện vào 45 phút mỗi giờ VÀ mỗi giờ. Điều đó có nghĩa là:

      Nó chạy lúc 3:45, sau đó 4:00, 4:45, sau đó 5:00, 5:45, 6:00, 6:45, v.v.

      Tôi có điều gì không ổn? Tôi có thể làm gì để chỉ có 45 phút một lần, hoặc ít nhất một lần vào 45 phút mỗi giờ.

  3.   Slack dijo

    Xin chào thông tin siêu hữu ích để làm rõ cách hoạt động của cron.
    Bytes

  4.   Slack dijo

    cho *

  5.   thợ săn dijo

    Tuyệt vời, cảm ơn vì đã làm rõ cách hoạt động của cron .. hãy chung tay một chút 🙂

  6.   Jacob dijo

    Theo tôi hiểu, dòng này sẽ được thực thi lúc 10:15 tối, hãy sửa cho tôi nếu tôi sai
    Vâng, nó nói 10:15 sáng
    15 22 * * * người dùng /home/user/scripts/update.sh

  7.   Agustin dijo

    Xin chào! thông tin rất tốt.
    Để thực thi một Script cứ sau nửa giờ, dòng sẽ được thêm vào CronTab sẽ là: "30 * * * * root Scrip.sh" Đúng không? Cảm ơn bạn rất nhiều!

  8.   hãy sử dụng linux dijo

    Không. Nếu tôi nhớ không nhầm, bạn phải đặt / 30 * * * * root Scrip.sh.
    Đó là, thêm / trước 30.
    Chúc mừng! Paul.

  9.   Jonathan dijo

    Xin chào, tôi thích bài viết của bạn, nó rất hoàn chỉnh nhưng tôi muốn hỏi bạn một điều.
    Tôi đang gặp sự cố với lệnh này và một lệnh như "at".

    Tôi muốn chạy một tập lệnh vào một thời điểm nhất định và đặt

    ví dụ tại -f /home/mi_user/Desk/script.sh 18:08

    và tập lệnh không được thực thi trên màn hình.

    Và với cron, điều tương tự cũng xảy ra với tôi, tôi chỉnh sửa tệp crontab bằng "crontab -e"

    ở cuối tôi thêm dòng này:

    46 19 my_user /home/mi_user/Desk/script.sh

    và nó không làm gì cả, nó không hiển thị script.

    Bất kì lời đề nghị nào? Cảm ơn bạn rất nhiều và xin lỗi vì bất kỳ sự bất tiện nào

    1.    hãy sử dụng linux dijo

      Để thiết bị đầu cuối xuất hiện, bạn có thể phải chạy thiết bị đầu cuối và chuyển tập lệnh làm tham số.

      Ví dụ:

      lxterminal -e "my_user /home/my_user/Desk/script.sh"

      Tham số sử dụng có thể khác nhau dựa trên trình giả lập đầu cuối mà bạn sử dụng.

      Tôi hy vọng nó hoạt động.

      Ôm! Paul.

  10.   patrecas dijo

    Sự đóng góp được đánh giá cao.

    10 điểm !!

    xin chào2!!

  11.   Rodolfo dijo

    Cảm ơn bạn rất nhiều, nó đã giúp tôi rất nhiều để làm sáng tỏ một số điều, cảm ơn tổng thể, để biết thêm chi tiết hoặc nghi ngờ tôi sẽ đến TRANG MAN, nhắc lại lời chào.

  12.   jahir dijo

    người đàn ông cảm ơn bạn rất nhiều, tôi đã đọc và thử nghiệm các ví dụ. cảm ơn bạn rất nhiều ... nó rất dễ hiểu. Chúc mừng

  13.   geovanni dijo

    Tôi đã sử dụng ubuntu Server 12.04.2 LTS và phiên bản crontab mà tôi có, để xóa danh sách công việc của người dùng được sử dụng, crontab -r (và -l, như hướng dẫn sử dụng này cho biết). Chắc chắn đó là câu hỏi của các phiên bản.

    Mặt khác, tôi đã từng chỉ chạy crontab và loại này cho phép tôi tạo tệp thực thi của riêng mình, nhưng đây không phải là tệp đang được thực thi. Cái chạy là cái trong / etc / crontab. có thể ai đó sẽ sử dụng bình luận.

    PS (Tôi đã tìm kiếm với định vị và whereis crontab nhưng nó chỉ trả về địa chỉ nói trên và một tệp khác được mã hóa, vì vậy nếu tệp được thực thi là tệp trong / etc / crontab, nhưng khi thực hiện lệnh crontab -e, tệp của tôi đã xuất hiện với tất cả các công việc mà tôi đã xác định) tệp này được lưu trữ ở đâu '???? Trân trọng. Tôi luôn đăng nhập bằng root.

  14.   Sebastian dijo

    Tuyệt vời, rất hữu ích !!!

  15.   mmm dijo

    Xin chào, tôi muốn thực hiện việc này ………… «15 10 * * * root ifdown eth0»

    có nghĩa là tại một thời điểm nhất định card mạng bị tắt ………… tốt, tôi đặt nó vào crontab và nó không hoạt động …… .. sao vậy?

    Saludos y gracias

  16.   Miguel dijo

    Bạn đã bỏ lỡ xác định "mon" sau tiêu đề "Thêm nhiệm vụ vào crontab"

    Bài viết vẫn hay, cron cực kỳ hữu ích.

  17.   Oscar dijo

    Bài viết hay đó thú vị làm sao, hãy hỏi tôi
    Nếu tôi muốn theo dõi các hồ sơ để lại trong quá trình thực thi các nhiệm vụ, tôi có thể xem nó ở đâu?

    là decdir Tôi muốn xem lịch sử của các hành động đã thực hiện trong quá khứ của tệp này và tôi muốn xem ai đã sửa đổi nó và ngày

    cảm ơn

  18.   oscar dijo

    Tôi muốn kiểm tra lịch sử sửa đổi của cái này

    tôi làm nó như thế nào

    cảm ơn

  19.   Andres Ledo dijo

    Chào buổi sáng,

    Tôi nghĩ rằng trong tập lệnh ubuntu bạn đã mắc lỗi, bạn đã đặt nâng cấp ap-get -y thay vì nâng cấp apt-get -y. (Bạn đã để lại một t).

    Một lời chào.

    1.    hãy sử dụng linux dijo

      Cũng vậy. Cảm ơn bạn!
      Ôm! Paul

  20.   Gabriel dijo

    Tôi muốn biết cách tạo tệp cron để có thể chỉ định thời gian mỗi khi nó được thực thi, thư mục, v.v.

  21.   Valentin dijo

    Cảm ơn bạn đã làm rõ hoạt động và các lệnh cơ bản cho cron, bây giờ để giải trí một chút.

  22.   Sander dijo

    Bất cứ khi nào tôi tìm kiếm thông tin về bất kỳ chủ đề nào liên quan đến Gnu / Linux, tôi đều đi vòng vo và cuối cùng tôi luôn tìm thấy trong 90% trường hợp hướng dẫn tốt nhất trong cộng đồng tuyệt vời này, tôi nghĩ rằng từ bây giờ tôi sẽ bắt đầu ở đây và sau đó ở nơi khác .

    Liên quan

    1.    hãy sử dụng linux dijo

      Cảm ơn Sander! Một cái ôm! Paul.

  23.   dario dijo

    dom = ngày trong tháng
    dow = ngày trong tuần
    nó dễ dàng hơn nếu bạn liên kết

  24.   Vượt qua dijo

    Cảm ơn bạn rất nhiều, điều này rất đầy đủ và giải thích tốt.

  25.   Hàm trên dijo

    Đây cũng chính là cái mà cô giáo OS của mình đã giao cho bọn mình, mình không thay đổi gì hết, giờ thấy lớp sao mà tệ quá .-. À, cái này cũng giống bài tập xD

  26.   Marcelo dijo

    Ước lượng,

    Truy vấn, thời lượng của một nhiệm vụ có thể bị giới hạn không?
    Ví dụ: tôi có một nhiệm vụ được lặp lại sau mỗi 5 phút, khi lặp lại nếu tác vụ này vẫn hoạt động, hãy tắt nó và chạy lại.

    Cảm ơn bạn,
    Marcello.-

    1.    hãy sử dụng linux dijo

      Xin chào, Marcelo!

      Tôi nghĩ sẽ tốt hơn nếu bạn nêu câu hỏi này trong dịch vụ hỏi đáp của chúng tôi có tên Xin DesdeLinux để cả cộng đồng có thể giúp bạn giải quyết vấn đề của mình.

      Một cái ôm, Pablo.

  27.   aj dijo

    bài tốt.
    Lệnh cho mỗi thiết bị đầu cuối là gì để thêm tác vụ vào crontab (mà không cần nhập crontab và thêm chúng theo cách thủ công bằng 'crontab -e' hoặc thay thế crontab bằng crontab khác bằng 'tệp crontab').
    Ý tưởng là tạo một tập lệnh bên ngoài để thêm các tác vụ vào crontab
    Cảm ơn

    1.    david dijo

      đối với tôi dường như bạn có thể sử dụng 'echo' bất cứ thứ gì bạn muốn thêm '| cat >> 'cronotab path (/ etc / cronotab)' «

  28.   Raphael Vera dijo

    Làm thế nào để một biểu thức chạy chính xác 3 ngày một lần

  29.   José Antonio dijo

    Hey.

    Tôi gặp sự cố khi thực hiện công việc cron.

    Tôi chạy tác vụ sau với cronta -e:

    01 * * * * root /home/user/script/mfile.sh

    nhưng nhiệm vụ không được thực hiện. Tôi đã xác minh rằng myfile.sh có quyền thực thi và người dùng thực thi nó là root.

    Tôi chạy tác vụ tương tự trong / etc / crontab và sau khi khởi động lại dịch vụ, nó cũng không hoạt động với tôi.
    Nội dung của myfile.sh là một lệnh cập nhật DB và nếu tôi chạy nó trong bảng điều khiển thì nó sẽ hoạt động.
    bất kỳ ý tưởng vấn đề có thể là gì?

    1.    Fredd dijo

      Người dùng cơ sở dữ liệu có thể không có tất cả các quyền và trước tiên bạn sẽ phải xuất các biến môi trường từ công cụ cơ sở dữ liệu của mình.
      Ví dụ trong db2 dòng này sẽ đi đến phần đầu của script
      . / home / db2inst1 / sqllib / db2profile

      Một nguyên nhân khác có thể là do tập lệnh yêu cầu kết nối với cơ sở dữ liệu, hãy thực hiện kết nối với cơ sở dữ liệu trong tập lệnh

  30.   LA3 dijo

    Tôi không biết rằng tôi phải khởi động lại crond, tôi đã chiến đấu với điều này trong một thời gian

  31.   kenya dijo

    Họ sẽ biết làm thế nào để chỉ ra rằng nhiệm vụ được thực hiện vào mỗi cuối tháng, vào thời gian được chỉ định .. chi tiết là tôi không thể đạt được làm thế nào tôi biết rằng phải mất ngày cuối cùng của mỗi tháng .. ?? Tôi đã phải viết chúng ra từng cái một nhưng khi đến cuối tháng Hai, điều đó thật khó hiểu vì điều đó thật phức tạp đối với tôi ..

  32.   Chúa Giêsu dijo

    ngày tốt!!

    Làm cách nào để dừng quá trình đang được thực thi trong crontab?

  33.   Chúa Giêsu dijo

    quá trình * …………

  34.   Julianna dijo

    Có thể là bạn có thể giúp tôi? eu tenho um script của tác giả minha mà không hoạt động không có crontab! Jб dei tất cả các quyền, không một cron hoặc người dùng cụ thể có thể thực thi nó-hầu hết không có gì xảy ra! Tôi muốn biết nếu bạn có thể giúp tôi, một số việc khác không hiệu quả! Vlws

  35.   Anthox dijo

    Bạn sẽ đặt một nhiệm vụ như thế nào để chạy vào mỗi ngày cuối cùng của tháng (ngày: 31-30-28)?

  36.   tfercho dijo

    Như bạn đã biết, lệnh su được sử dụng để thay đổi người dùng trong bảng điều khiển. Nếu tôi sử dụng lệnh su như vậy: "your user" thay đổi người dùng nhưng không có cài đặt phù hợp của "người dùng", nếu tôi chạy su với tư cách: "su - user", hãy thay đổi người dùng bằng cách tải cài đặt người dùng. Với cron, tôi chỉ ra người dùng, nhưng làm cách nào để tải cấu hình của người dùng này?

  37.   cướp dijo

    Và nếu tôi muốn dừng nó lại?

  38.   Chế độ dijo

    Xin chào,
    Tôi không biết mình đang làm gì sai, nhưng tôi làm theo các bước và không có gì được thực hiện. Tôi đã thử:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    và không có gì cả. Nó không thực thi bất cứ điều gì. Tôi đã khởi động lại và mọi thứ.

  39.   nhiệt kế dijo

    cảm ơn bạn rất nhiều