Timer Cron vs systemd

84

Baru-baru ini ditunjukkan kepada saya bahwa ada alternatif untuk cron, yaitu timer sistemd.

Namun, saya tidak tahu apa-apa tentang timer systemd atau systemd. Saya hanya menggunakan cron.

Ada sedikit diskusi di Arch Wiki . Namun, saya mencari perbandingan terperinci antara crondan timer sistemd, dengan fokus pada pro dan kontra. Saya menggunakan Debian, tetapi saya ingin perbandingan umum untuk semua sistem yang tersedia dua alternatif ini. Set ini hanya mencakup distribusi Linux.

Inilah yang saya tahu.

Cron sudah sangat tua, kembali ke akhir 1970-an. Penulis asli cron adalah Ken Thompson, pencipta Unix. Vixie cron, yang crons dalam distribusi Linux modern adalah keturunan langsung, berasal dari tahun 1987.

Systemd jauh lebih baru, dan agak kontroversial. Wikipedia memberi tahu saya bahwa rilis awalnya adalah 30 Maret 2010.

Jadi, daftar kelebihan cron saya saat ini tentang timer sistemd adalah:

  1. Cron dijamin berada dalam sistem seperti Unix, dalam arti sebagai bagian perangkat lunak yang dapat diinstal yang dapat diinstal. Itu tidak akan berubah. Sebaliknya, systemd mungkin atau mungkin tidak tetap dalam distribusi Linux di masa depan. Ini terutama merupakan sistem init, dan dapat digantikan oleh sistem init yang berbeda.

  2. Cron mudah digunakan. Jelas lebih sederhana dari timer systemd.

Daftar keuntungan yang sesuai dari timer sistemd atas cron adalah:

  1. Pengatur waktu Systemd mungkin lebih fleksibel dan mampu. Tapi saya ingin contoh itu.

Jadi, untuk meringkas, berikut adalah beberapa hal yang baik untuk dilihat dalam sebuah jawaban:

  1. Perbandingan rinci tentang timer cron vs systemd, termasuk pro dan kontra dari penggunaan masing-masing.
  2. Contoh-contoh hal yang dapat dilakukan seseorang, yang lain tidak
  3. Setidaknya satu perbandingan sisi-sisi dari skrip cron vs skrip pengatur waktu systemd.
Faheem Mitha
sumber
4
"Cron dijamin berada dalam sistem seperti Unix. Itu tidak akan berubah." - Saya akan sangat memperdebatkan ini. Walaupun secara historis cron sering dimasukkan dalam pengaturan dasar instalasi Unix, pada sebagian besar sistem saat ini hanya merupakan paket perangkat lunak opsional yang berubah-ubah. Bahkan, ada beberapa alternatif cron populer di sekitar (misalnya anacron, fcron, jobber) yang mungkin lebih disukai daripada cron. Fungsi cron tidak penting untuk operasi sistem seperti systemd atau init, jadi jika Anda khawatir tentang portabilitas saat ini dan masa depan, saya lebih suka tidak menempatkan taruhan saya di atasnya.
Guido
6
Itu daftar hal yang Anda inginkan dalam sebuah jawaban. Saya pikir mungkin Anda harus meluangkan waktu mempelajari sendiri alat-alat itu dan melihat apakah Anda dapat merumuskan jawaban itu sendiri, dan jika Anda memiliki hal - hal spesifik yang tidak Anda pahami, tanyakan di sini.
larsks
5
Tidak juga. Saya sudah mengatakan semua yang ingin saya katakan tentang topik ini. Masuk ke diskusi panjang tentang apa pun yang melibatkan systemd lebih buruk daripada sia-sia - beberapa orang berpikir bahwa manfaat kecil yang dibawa systemd bernilai monopolisasi korporat ekosistem linux. Yang lain tidak.
cas
7
"Cron sudah sangat tua, kembali ke akhir tahun 1970-an." Secara faktual benar, tetapi sama sekali tidak relevan selama paket-paket pada sistem Anda dipertahankan dengan cara yang masuk akal dan stabil. Matahari juga sangat tua, tapi saya harap itu tidak berarti kita harus menggantinya dengan sesuatu yang lebih bersinar dan lebih baru.
Otheus
5
@Othus, saya pikir Anda salah mengambil bagian itu — mengatakan sesuatu sudah ada sejak lama bukan merupakan penghinaan. Setidaknya untuk banyak orang Unix. Ini lebih seperti mengatakan sebuah rumah berumur ratusan tahun — itu pasti berarti ia akan memiliki beberapa masalah, beberapa hal akan terasa aneh dari perkuatan, tetapi juga memiliki daya tarik tertentu, dan itu pasti dibangun dengan baik. Ini bukan untuk mengatakan jompo. Ini alat sederhana yang telah terbukti bermanfaat selama empat dekade.
derobert

Jawaban:

43

Inilah beberapa poin tentang keduanya :

  1. memeriksa apa pekerjaan cron Anda benar-benar dapat menjadi berantakan, tetapi semua acara pengatur waktu systemd dicatat dengan cermat di jurnal systemd seperti unit systemd lainnya berdasarkan peristiwa yang membuat segalanya lebih mudah.

  2. pengatur waktu systemd adalah layanan systemd dengan semua kemampuannya untuk manajemen sumber daya, penjadwalan IO CPU, ...
    Ada daftar:

    • filter panggilan sistem
    • id pengguna / grup
    • kontrol keanggotaan
    • nilai bagus
    • Skor OOM
    • Kelas penjadwalan dan prioritas IO
    • CPU kebijakan penjadwalan CPU
    • umin afinitas
    • celana waktu pengatur waktu
    • bit yang aman
    • akses jaringan dan, ...
  3. dengan opsi dependensi sama seperti layanan systemd lainnya, mungkin ada dependensi pada waktu aktivasi.

  4. Unit dapat diaktifkan dengan cara yang berbeda, juga kombinasi dari mereka dapat dikonfigurasi. layanan dapat dimulai dan dipicu oleh berbagai peristiwa seperti pengguna, boot, perubahan status perangkat keras atau misalnya 5 menit setelah beberapa perangkat keras dicolokkan dan, ...

  5. konfigurasi jauh lebih mudah beberapa file dan tag lurus ke depan untuk melakukan berbagai penyesuaian berdasarkan kebutuhan Anda dengan timer sistemd.

  6. Mudah mengaktifkan / menonaktifkan semuanya dengan:

    systemctl enable/disable 
    

    dan bunuh semua anak pekerjaan dengan:

    systemctl start/stop
    
  7. timer systemd dapat dijadwalkan dengan kalender dan waktu monoton, yang dapat sangat berguna dalam kasus zona waktu yang berbeda dan, ...

  8. systemd time events (kalender) lebih akurat daripada cron (sepertinya presisi 1s)

  9. peristiwa sistemd waktu lebih bermakna, bagi yang berulang atau bahkan yang harus terjadi sekali, berikut adalah contoh dari dokumen :

    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. Dari sudut pandang penggunaan CPU, systemd timer membangunkan CPU pada waktu yang telah berlalu tetapi cron melakukannya lebih sering.

  11. Acara pengatur waktu dapat dijadwalkan berdasarkan waktu selesai eksekusi, beberapa penundaan dapat diatur di antara eksekusi.

  12. Komunikasi dengan program lain juga penting kadang-kadang diperlukan untuk beberapa program lain untuk mengetahui timer dan keadaan tugas mereka.

F.sb
sumber
2
Itu upaya yang bagus, terima kasih. Namun, perbandingan yang lebih langsung dengan cron akan membantu, termasuk sebuah contoh. Juga, beberapa dari apa yang Anda tulis tidak sepenuhnya jelas, misalnya "dari sudut pandang penggunaan CPU systemd timer membangunkan CPU pada waktu yang telah berlalu tetapi cron melakukannya lebih sering."
Faheem Mitha
Halo, @sb! Jawaban Anda tampaknya menyiratkan bahwa Anda dapat menjadwalkan pekerjaan menggunakan zona waktu yang berbeda. Apakah ini benar? Bagaimana Anda akan melakukannya? Ini akan menjadi keuntungan yang signifikan dibandingkan implementasi standar cron, tetapi saya tidak dapat menemukan info tentang itu, kecuali man systemd.timeyang tampaknya bertentangan: Zona waktu non-lokal kecuali untuk UTC tidak didukung.
Tad Lispy
Ketergantungan sangat berguna. Sebagai contoh jika cadangan host berjalan sebagai penghitung waktu sistemd maka Anda dapat menggunakan dependensi untuk memastikan bahwa ekspor database selesai segera sebelum cadangan.
vk5tu
6
Harap lebih jujur ​​di muka. Anda memulai dengan mengatakan ini adalah beberapa poin tentang keduanya, dan kemudian melanjutkan dengan daftar keuntungan dari pilihan pilihan Anda . Tidak buruk bahwa Anda memiliki preferensi, tetapi kemudian Anda harus menyatakannya di muka. Di atas semua itu, fakta bahwa itu semua mendukung satu sistem dan tidak melihat pro bahwa sistem telah membuat saya merasa jawaban ini miring.
Jasper
2
@Jasper sayang saya menggunakan keduanya berdasarkan kebutuhan saya, dan selalu pilihan Anda untuk memilih satu berdasarkan kebutuhan Anda, saya hanya menyebutkan beberapa fakta berdasarkan dokumen dan manual.
F.sb
16

Langsung dari mulut kuda, bisa dikatakan: https://wiki.archlinux.org/index.php/Systemd/Timers#As_a_cron_replacement

Kutipan dari halaman di atas:

Manfaat

Manfaat utama menggunakan timer berasal dari setiap pekerjaan yang memiliki layanan systemd sendiri. Beberapa manfaat ini adalah:

  • Pekerjaan dapat dengan mudah dimulai secara independen dari penghitung waktu mereka. Ini menyederhanakan debugging.
  • Setiap pekerjaan dapat dikonfigurasi untuk dijalankan dalam lingkungan tertentu (lihat systemd.exec (5)).
  • Pekerjaan dapat dilampirkan ke cgroup.
  • Pekerjaan dapat diatur untuk bergantung pada unit systemd lainnya.
  • Pekerjaan dicatat dalam jurnal systemd untuk memudahkan debugging.

Peringatan

Beberapa hal yang mudah dilakukan dengan cron sulit dilakukan dengan unit pengatur waktu saja.

  • Kompleksitas: untuk mengatur pekerjaan waktunya dengan systemd Anda membuat dua file dan menjalankan beberapa perintah systemctl. Bandingkan dengan menambahkan satu baris ke crontab.
  • Email: tidak ada built-in yang setara dengan MAILTO cron untuk mengirim email pada kegagalan pekerjaan. Lihat bagian selanjutnya untuk contoh pengaturan yang setara menggunakan OnFailure =.
shdwlynx
sumber
6
Errr ... tidak yakin bagaimana perasaan saya tentang jawaban yang hampir seluruhnya menyalin & menempel, terutama karena lisensi tidak kompatibel. Tetapi minimal, Anda harus memperbaikinya sedikit "lihat bagian berikutnya". Dengan kesalahan itu, rasanya seolah Anda tidak membaca apa yang Anda salin & tempelkan.
derobert