Cron vs bộ định thời systemd


83

Gần đây tôi đã chỉ ra rằng một sự thay thế cho cron tồn tại, cụ thể là bộ định thời systemd.

Tuy nhiên, tôi không biết gì về bộ định thời systemd hoặc systemd. Tôi chỉ sử dụng cron.

Có một cuộc thảo luận nhỏ trong Arch Wiki . Tuy nhiên, tôi đang tìm kiếm một so sánh chi tiết giữa cronvà bộ định thời systemd, tập trung vào ưu và nhược điểm. Tôi sử dụng Debian, nhưng tôi muốn so sánh chung cho tất cả các hệ thống có sẵn hai lựa chọn thay thế này. Bộ này có thể chỉ bao gồm các bản phân phối Linux.

Đây là những gì tôi biết.

Cron rất già, trở lại vào cuối những năm 1970. Tác giả ban đầu của cron là Ken Thompson, người tạo ra Unix. Vixie cron, trong đó các crons trong các bản phân phối Linux hiện đại là hậu duệ trực tiếp, có từ năm 1987.

Systemd mới hơn nhiều, và có phần gây tranh cãi. Wikipedia cho tôi biết bản phát hành ban đầu của nó là ngày 30 tháng 3 năm 2010.

Vì vậy, danh sách các lợi thế hiện tại của cron so với bộ định thời systemd là:

  1. Cron được đảm bảo có mặt trong bất kỳ hệ thống nào giống Unix, với ý nghĩa là một phần mềm được hỗ trợ có thể cài đặt. Điều đó sẽ không thay đổi. Ngược lại, systemd có thể hoặc không tồn tại trong các bản phân phối Linux trong tương lai. Nó chủ yếu là một hệ thống init và có thể được thay thế bằng một hệ thống init khác.

  2. Cron là đơn giản để sử dụng. Chắc chắn đơn giản hơn bộ định thời systemd.

Danh sách các lợi thế tương ứng của bộ định thời systemd so với cron là:

  1. Bộ định thời Systemd có thể linh hoạt và có khả năng hơn. Nhưng tôi muốn những ví dụ về điều đó.

Vì vậy, để tóm tắt, đây là một số điều sẽ tốt để xem trong một câu trả lời:

  1. Một so sánh chi tiết về bộ định thời cron và systemd, bao gồm cả ưu và nhược điểm của việc sử dụng từng bộ.
  2. Ví dụ về những điều người ta có thể làm mà người kia không thể.
  3. Ít nhất một so sánh song song của tập lệnh cron với tập lệnh bộ định thời hệ thống.

4
"Cron được đảm bảo có mặt trong bất kỳ hệ thống nào giống Unix. Điều đó sẽ không thay đổi." - Tôi sẽ tranh luận mạnh mẽ về điều này. Mặc dù cron trong lịch sử thường được bao gồm trong thiết lập cơ sở của các bản cài đặt Unix, nhưng trên hầu hết các hệ thống ngày nay, nó chỉ đơn giản là một gói phần mềm tùy chọn tùy ý trong số các phần mềm khác. Trong thực tế, có một số lựa chọn thay thế cron phổ biến xung quanh (ví dụ: anacron, fcron, jobber) có thể thích hợp hơn cron. Chức năng của cron không cần thiết cho hoạt động của hệ thống theo cách systemd hoặc init, vì vậy nếu bạn lo lắng về tính di động hiện tại và tương lai, tôi không muốn đặt cược vào nó.
Guido

6
Đó là một danh sách những điều bạn muốn trong câu trả lời. Tôi nghĩ có lẽ bạn nên dành thời gian tự học các công cụ và xem liệu bạn có thể tự mình đưa ra những câu trả lời đó không, và nếu bạn có những điều cụ thể mà bạn không hiểu, hãy hỏi chúng ở đây.
larsks

5
Không hẳn vậy. Tôi đã nói tất cả những gì tôi muốn nói về chủ đề này. Tham gia vào một cuộc thảo luận mở rộng về bất cứ điều gì liên quan đến systemd còn tệ hơn là vô nghĩa - một số người nghĩ rằng những lợi ích nhỏ mà systemd mang lại là xứng đáng với sự thống trị của công ty đối với hệ sinh thái linux. Những người khác thì không.
cas

7
"Cron rất già, trở lại vào cuối những năm 1970." Thực tế chính xác, nhưng hoàn toàn không liên quan miễn là các gói trên hệ thống của bạn đang được duy trì một cách hợp lý và ổn định. Mặt trời cũng rất cũ, nhưng tôi hy vọng điều đó không có nghĩa là chúng ta nên thay thế nó bằng thứ gì đó sáng hơn và mới hơn.
Otheus

5
@Otheus Tôi nghĩ rằng bạn đã thực hiện sai phần đó, nói rằng một cái gì đó đã tồn tại trong một thời gian dài không phải là một sự xúc phạm. Ít nhất là với rất nhiều người Unix. Nó giống như nói rằng một ngôi nhà đã hàng trăm năm tuổi, điều đó chắc chắn có nghĩa là nó sẽ gặp một số vấn đề, một số thứ sẽ kỳ lạ khi trang bị thêm, nhưng nó cũng có một sức hấp dẫn nhất định, và nó phải được xây dựng tốt. Nó không nói lên sự suy đồi của nó. Đây là một công cụ đơn giản đã được chứng minh là hữu ích trong bốn thập kỷ.
derobert

Câu trả lời:


43

Dưới đây là một số điểm về hai điều đó :

  1. kiểm tra xem công việc định kỳ của bạn thực sự có thể là một mớ hỗn độn, nhưng tất cả các sự kiện hẹn giờ systemd đều được ghi nhật ký cẩn thận trên tạp chí systemd như các đơn vị systemd khác dựa trên sự kiện giúp mọi việc dễ dàng hơn nhiều.

  2. bộ định thời systemd là các dịch vụ systemd với tất cả các khả năng của chúng để quản lý tài nguyên, lập lịch CPU IO, ...
    Có một danh sách:

    • bộ lọc hệ thống
    • id người dùng / nhóm
    • thành viên liên kết
    • giá trị tốt đẹp
    • Điểm OOM
    • Lớp lập kế hoạch IO và ưu tiên
    • Chính sách lập lịch CPU CPU
    • ái lực
    • bộ đếm thời gian
    • bit an toàn
    • truy cập mạng và, ...
  3. với tùy chọn phụ thuộc giống như các dịch vụ systemd khác, có thể có phụ thuộc vào thời gian kích hoạt.

  4. Các đơn vị có thể được kích hoạt theo những cách khác nhau, cũng có thể cấu hình chúng. các dịch vụ có thể được khởi động và kích hoạt bởi các sự kiện khác nhau như người dùng, khởi động, thay đổi trạng thái phần cứng hoặc ví dụ 5 phút sau khi một số phần cứng được cắm và ...

  5. cấu hình dễ dàng hơn nhiều một số tệp và thẻ chuyển tiếp để thực hiện nhiều tùy chỉnh dựa trên nhu cầu của bạn với bộ định thời systemd.

  6. Dễ dàng bật / tắt toàn bộ nội dung với:

    systemctl enable/disable 
    

    và giết tất cả trẻ em của công việc với:

    systemctl start/stop
    
  7. Bộ định thời systemd có thể được lên lịch với lịch và thời gian đơn điệu, có thể thực sự hữu ích trong trường hợp các múi giờ khác nhau và, ...

  8. sự kiện thời gian hệ thống (lịch) chính xác hơn cron (có vẻ chính xác 1 giây)

  9. các sự kiện thời gian hệ thống có ý nghĩa hơn, đối với những sự kiện định kỳ hoặc thậm chí những sự kiện sẽ xảy ra một lần, đây là một ví dụ từ tài liệu :

    Sat,Thu,Mon-Wed,Sat-Sun → Mon-Thu,Sat,Sun *-*-*00:00:00
      Mon,Sun 12-*-* 2,1:23 → Mon,Sun 2012-*-* 01,02:23:00
                    Wed *-1 → Wed *-*-01 00:00:00
            Wed-Wed,Wed *-1 → Wed *-*-01 00:00:00
                 Wed, 17:48 → Wed *-*-* 17:48:00 
    
  10. Từ quan điểm sử dụng CPU, bộ đếm thời gian systemd đánh thức CPU trong thời gian đã trôi qua nhưng cron làm điều đó thường xuyên hơn.

  11. Các sự kiện hẹn giờ có thể được lên lịch dựa trên thời gian kết thúc thực hiện, một số độ trễ có thể được đặt giữa các lần thực hiện.

  12. Việc liên lạc với các chương trình khác cũng đáng chú ý đôi khi cần một số chương trình khác để biết bộ tính giờ và trạng thái của nhiệm vụ.


2
Đó là một nỗ lực tốt, cảm ơn bạn. Tuy nhiên, so sánh trực tiếp hơn với cron sẽ hữu ích, bao gồm một ví dụ. Ngoài ra, một số nội dung bạn viết không hoàn toàn rõ ràng, ví dụ: "từ bộ đếm thời gian hệ thống điểm sử dụng CPU đánh thức CPU trong thời gian đã trôi qua nhưng cron làm điều đó thường xuyên hơn."
Faheem Mitha

Xin chào, @ F.sb! Câu trả lời của bạn dường như ngụ ý rằng bạn có thể lên lịch công việc bằng các múi giờ khác nhau. Điều này có đúng không? Bạn làm điều đó như thế nào? Nó sẽ là một lợi thế đáng kể so với việc triển khai cron tiêu chuẩn, nhưng tôi không thể tìm thấy bất kỳ thông tin nào về nó, ngoại trừ man systemd.timeđiều đó có vẻ mâu thuẫn với nó: các múi giờ không cục bộ trừ UTC không được hỗ trợ.
Tad Lispy

Các phụ thuộc là tiện dụng. Ví dụ: nếu bản sao lưu máy chủ chạy như một bộ đếm thời gian systemd thì bạn có thể sử dụng các phụ thuộc để đảm bảo rằng việc xuất cơ sở dữ liệu hoàn thành ngay trước khi sao lưu.
vk5tu

6
Xin hãy trung thực hơn lên phía trước. Bạn bắt đầu bằng cách nói đây là một số điểm về hai điều này, và sau đó tiếp tục bằng cách liệt kê những lợi thế của sự lựa chọn ưa thích của bạn . Không có gì xấu khi bạn có một sở thích, nhưng sau đó bạn nên nêu lên trước. Trên hết, thực tế là tất cả đều ủng hộ một hệ thống và không nhìn vào ưu điểm mà hệ thống đã khiến tôi cảm thấy câu trả lời này bị sai lệch.
Jasper

2
@jasper thân mến, tôi sử dụng cả hai dựa trên nhu cầu của mình và luôn luôn là lựa chọn của bạn để chọn một dựa trên nhu cầu của bạn, tôi chỉ đề cập đến một số sự kiện dựa trên tài liệu và hướng dẫn sử dụng.
F.sb

16

Nói thẳng từ miệng ngựa, có thể nói: https://wiki.archlinux.org/index.php/Systemd/Timers#As_a_cron_Vplocation

Một đoạn trích từ trang trên:

Những lợi ích

Những lợi ích chính của việc sử dụng bộ định thời đến từ mỗi công việc có dịch vụ systemd riêng. Một số lợi ích này là:

  • Công việc có thể dễ dàng bắt đầu độc lập với bộ tính giờ của họ. Điều này đơn giản hóa việc gỡ lỗi.
  • Mỗi công việc có thể được cấu hình để chạy trong một môi trường cụ thể (xem systemd.exec (5)).
  • Công việc có thể được gắn vào cgroups.
  • Công việc có thể được thiết lập để phụ thuộc vào các đơn vị systemd khác.
  • Các công việc được đăng nhập vào tạp chí systemd để dễ dàng gỡ lỗi.

Hãy cẩn thận

Một số điều dễ thực hiện với cron rất khó thực hiện chỉ với các đơn vị hẹn giờ.

  • Độ phức tạp: để thiết lập một công việc được định thời với systemd, bạn tạo hai tệp và chạy một vài lệnh systemctl. So sánh điều đó với việc thêm một dòng duy nhất vào crontab.
  • Email: không có tích hợp tương đương với MAILTO của cron để gửi email khi thất bại trong công việc. Xem phần tiếp theo để biết ví dụ về thiết lập tương đương bằng OnFailure =.

6
Errr ... không chắc tôi cảm thấy thế nào về một câu trả lời gần như hoàn toàn sao chép và dán, đặc biệt là khi giấy phép không tương thích. Nhưng tối thiểu, bạn nên sửa bit "xem phần tiếp theo". Với sai lầm đó, cảm giác như thể bạn đã không đọc những gì bạn đã sao chép và dán.
derobert

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.