Cron vs systemd zamanlayıcılar


83

Son zamanlarda bana cron alternatifinin, yani sistem zamanlayıcılarının mevcut olduğu belirtildi.

Ancak, sistem veya sistem zamanlayıcıları hakkında hiçbir şey bilmiyorum. Ben sadece cron kullandım.

Arch Wiki'de küçük bir tartışma var . Ancak, cronartı ve eksilere odaklanan ve sistem zamanlayıcıları arasında ayrıntılı bir karşılaştırma arıyorum . Debian'ı kullanıyorum, ancak bu iki alternatifin mevcut olduğu tüm sistemler için genel bir karşılaştırma yapmak istiyorum. Bu set sadece Linux dağıtımlarını içerebilir.

İşte bildiğim şey.

Cron çok eski, 1970'lerin sonlarına dayanıyor. Cron'un asıl yazarı, Unix'in yaratıcısı Ken Thompson'dur. Modern Linux dağıtımlarındaki düğümleri doğrudan torunları olan Vixie cron 1987'den kalmadır.

Systemd çok daha yeni ve biraz tartışmalı. Wikipedia ilk sürümünün 30 Mart 2010 olduğunu söyledi.

Bu nedenle, cronun sistem zamanlayıcılarına göre şu anki avantajları listem:

  1. Cron, herhangi bir Unix benzeri sistemde, monte edilebilir bir yazılım parçası olması anlamında garantilidir. Bu değişmeyecek. Aksine, sistemd gelecekteki Linux dağıtımlarında kalabilir veya kalmayabilir. Esas olarak bir init sistemidir ve farklı bir init sistemi ile değiştirilebilir.

  2. Cron kullanımı kolaydır. Kesinlikle sistem zamanlayıcılarından daha basittir.

Sistem zamanlayıcılarının cron üzerindeki avantajlarının karşılık gelen listesi:

  1. Sistem zamanlayıcıları daha esnek ve yetenekli olabilir. Ama bunun örneklerini istiyorum.

Özetle, işte cevap olarak görmenin iyi olacağı bazı şeyler:

  1. Her birinin kullanımının avantajları ve dezavantajları dahil, cron vs systemd zamanlayıcılarının ayrıntılı karşılaştırması.
  2. Birinin diğerinin yapamayacağı şeylere örnekleri.
  3. Bir cd betiğinin bir systemd zamanlayıcı betiğine karşı en az yan yana karşılaştırması.

4
“Cron'un Unix benzeri herhangi bir sistemde olması garanti edilir. Bu değişmeyecek.” - Bunu şiddetle tartışırdım. Tarihsel olarak cron çoğu kez Unix kurulumlarının temel kurulumuna dahil edilmiş olsa da, bugün çoğu sistemde diğerleri arasında isteğe bağlı isteğe bağlı bir yazılım paketidir. Aslında, cron'a tercih edilebilecek birkaç popüler cron alternatifi vardır (örneğin, anakron, fcron, jobber). cron'un işlevselliği, bir sistemin çalışması için sistem veya init yönteminin şartı değildir, bu nedenle mevcut ve gelecekteki taşınabilirlik konusunda endişeliyseniz, bahislerimi üzerine yatırmamayı tercih ederim.
Guido

6
Cevap olarak istediğiniz şeylerin listesi. Bence, belki araçları kendi başınıza öğrenmek için biraz zaman harcamalısınız ve bu cevapları kendi başınıza formüle edip edemediğinizi görmelisiniz ve anlamadığınız özel şeyleriniz varsa, buradan isteyin.
larsks

5
Pek sayılmaz. Konu hakkında söylemek istediğim her şeyi söyledim. Sistem içeren herhangi bir şey hakkında genişletilmiş bir tartışmaya girmek, anlamsız olmaktan daha kötü - bazıları sistemin sağladığı küçük faydaların, linux ekosisteminin kurumsal tekelleşmesine değdiğini düşünüyor. Diğerleri yapmaz.
Cas

7
“Cron çok eski, 1970'lerin sonlarına dayanıyor.” Aslında doğru, ancak sisteminizdeki paketler makul ve istikrarlı bir şekilde muhafaza edildiği sürece tamamen anlamsızdır. Güneş de çok eski, ama umarım bu onu daha parlak ve daha yeni bir şeyle değiştirmemiz gerektiği anlamına gelmez.
Otheus

5
@Otheus Sanırım bu kısmı yanlış yönlendiriyorsun - uzun süredir bir şeylerin olduğunu söylemek hakaret değil. En azından bir sürü Unix milletine. Bir evin yüzlerce yıllık olduğunu söylemek gibi bir şey - bu kesinlikle bazı problemleri yaşayacağı, bazı şeylerin güçlendirme yapmaktan tuhaf olacağı anlamına geliyor, ama aynı zamanda belli bir çekiciliği var ve iyi inşa edilmiş olmalı. Onun yıpranmış olduğunu söylemek değil. Kırk yıl boyunca faydalı olduğu kanıtlanmış basit bir araçtır.
derobert

Yanıtlar:


43

İşte bu ikisi hakkında bazı noktalar :

  1. cron job'unuzun gerçekte ne yaptığını kontrol etmek biraz karışık olabilir, ancak tüm systemd zamanlayıcı olayları, işleri çok daha kolay hale getiren olaya dayanan diğer systemd birimleri gibi systemd günlüğüne dikkatlice kaydedilir.

  2. systemd zamanlayıcıları kaynak yönetimi, IO CPU zamanlaması, tüm yetenekleri ile systemd servisleridir ...
    Bir liste var:

    • sistem çağrısı filtreleri
    • kullanıcı / grup kimlikleri
    • membershipcontrols
    • hoş değer
    • OOM puanı
    • GÇ planlama sınıfı ve önceliği
    • CPU planlama politikası CPU
    • yakınlık umask
    • zamanlayıcı slacks
    • güvenli bit
    • ağ erişimi ve, ...
  3. Bağımlılıklar seçeneğinde tıpkı diğer sistem hizmetleri gibi, etkinleştirme süresine bağlı olabilir.

  4. Birimler farklı şekillerde etkinleştirilebilir, ayrıca bunların kombinasyonu da yapılandırılabilir. hizmetler, kullanıcı, önyükleme, donanım durumu değişiklikleri veya bazı donanımların takılmasından sonra 5 dakika gibi farklı olaylar tarafından başlatılabilir ve tetiklenebilir.

  5. sistemd zamanlayıcıları ile ihtiyaçlarınıza göre özelleştirmeler yapmak için bazı dosyaları ve yalındır etiketleri çok daha kolay yapılandırma.

  6. Her şeyi kolayca etkinleştirin / devre dışı bırakın:

    systemctl enable/disable 
    

    ve işin tüm çocuklarını aşağıdakilerle öldürün:

    systemctl start/stop
    
  7. Sistem zamanlayıcıları, farklı zaman dilimlerinde gerçekten yararlı olabilen kalenderler ve monotonik zamanlar ile programlanabilir ve ...

  8. systemd zaman etkinlikleri (takvim) cron'dan daha hassastır (1s hassasiyetli görünüyor)

  9. systemd zaman olayları, tekrarlayanlar ve hatta bir kez olması gerekenler için daha anlamlıdır, işte belgeden bir örnek :

    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. CPU kullanım bakış açısından systemd timer, geçen sürede CPU'yu uyandırır, ancak cron bunu daha sık yapar.

  11. Zamanlayıcı olayları, yürütmelerin bitiş zamanlarına bağlı olarak zamanlanabilir; yürütmeler arasında bazı gecikmeler ayarlanabilir.

  12. Diğer programlarla iletişim kurmak da kayda değerdir, bazen diğer bazı programların zamanlayıcıları ve görevlerinin durumunu bilmesi gerekir.


2
Bu iyi bir çaba, teşekkür ederim. Bununla birlikte, bir örnek de dahil olmak üzere cron ile daha doğrudan karşılaştırmalar yararlı olacaktır. Ayrıca, yazdıklarınızın bazıları tamamen net değil, örneğin "CPU kullanım bakış açısı sistemd zamanlayıcısından CPU'yu geçen sürede uyandırıyor, ancak cron bunu daha sık yapıyor."
Faheem Mitha

Merhaba, @ F.sb! Cevabınız farklı zaman dilimlerini kullanarak işleri zamanlayabileceğiniz anlamına geliyor gibi görünüyor. Bu doğru mu? Bunu nasıl yaptın? Standart cron uygulamalarına göre önemli bir avantaj olurdu, ancak man systemd.timebununla çelişen görünenler dışında
Tad Lispy

Bağımlılıklar kullanışlıdır. Örneğin, ana bilgisayar yedeklemesi bir sistem zamanlayıcısı olarak çalışıyorsa, veritabanı dışa aktarmasının yedeklemeden hemen önce tamamlanmasını sağlamak için bağımlılıkları kullanabilirsiniz.
vk5tu

6
Lütfen daha dürüst ol. Bunların ikisi hakkında bir nokta olduğunu söyleyerek başlıyorsunuz ve ardından tercih ettiğiniz tercihin avantajlarını listeleyerek devam ediyorsunuz . Bir tercihin olması fena değil, ama o zaman ön tarafa geçmelisin. Bunun da ötesinde, hepsinin bir sistemin lehine olması ve sistemin bu cevabın bana çarpık olduğunu hissettirdiği artılara bakmadığı gerçeği.
Jasper,

2
@ jasper canım ikisini de ihtiyaçlarıma göre kullanıyorum ve ihtiyaçlarınızı temel alarak birini seçmek her zaman sizin seçimim, az önce doküman ve el kitaplarına dayanan bazı gerçeklerden bahsetmiştim.
F.sb

16

Atın ağzından dümdüz, tabiri caizse: https://wiki.archlinux.org/index.php/Systemd/Timers#As_a_cron_replacement

Yukarıdaki sayfadan bir bölüm:

Yararları

Zamanlayıcı kullanmanın temel faydaları, kendi sistem hizmetine sahip olan her işten gelir. Bu faydalardan bazıları:

  • İşler zamanlayıcılarından bağımsız olarak kolayca başlatılabilir. Bu hata ayıklamayı kolaylaştırır.
  • Her iş belirli bir ortamda çalışmak üzere yapılandırılabilir (bkz. Systemd.exec (5)).
  • İşler gruplara eklenebilir.
  • İşler diğer sistemd birimlerine bağlı olarak ayarlanabilir.
  • Kolay hata ayıklama için işler sistem günlüğüne kaydedilir.

Uyarılar

Cron ile yapılması kolay olan bazı şeylerin yalnızca zamanlayıcı ünitelerle yapılması zordur.

  • Karmaşıklık: systemd ile zamanlanmış bir iş ayarlamak için iki dosya yaratır ve birkaç systemctl komutunu çalıştırırsınız. Bunu crontab'a tek bir satır ekleyerek karşılaştırın.
  • E-postalar: İş başarısızlığında e-posta göndermek için cron'un MAILTO'suna eşdeğeri yoktur. OnFailure = kullanarak bir eşdeğer kurma örneği için bir sonraki bölüme bakın.

6
Errr ... özellikle de lisanslar uyumlu olmadığından neredeyse tamamen kopyalayıp yapıştırılan bir cevap hakkında ne düşündüğümden emin değilim. Ama en azından, bu "bir sonraki bölüme bakınız" bitini düzeltmelisiniz. Bu hatayla, kopyaladığınız ve yapıştırdığınız şeyi okumamışsınız gibi hissediyor.
derobert

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.