Haruskah saya mengedit / etc / crontab atau menjalankan crontab -e sebagai root?

43

Saya menyiapkan tugas pemeliharaan sistem biasa yang harus dijalankan sebagai root. Saya berencana untuk menggunakan rasa cron yang datang dengan Ubuntu 14,04 LTS sebagai default.

Saya melihat admin sebelumnya (yang sejak meninggalkan perusahaan) diedit / etc / crontab secara langsung. Namun saya mengerti pendekatan lain yang mungkin akan digunakan crontab -esebagai root. Apakah ada argumen yang memaksa untuk menggunakan satu atau yang lain, atau apakah itu ke preferensi?

marcv81
sumber
9
Bagi saya, ini sepertinya pertanyaan praktik terbaik yang sah, dan saya harap itu tidak ditutup. Saya sudah bisa melihat poin faktual yang relevan dibuat dalam jawaban, dan komentar di dalamnya.
MadHatter mendukung Monica
1
Saya pernah pergi ke ketik crontab -l (untuk daftar crontab) tapi saya mengetik crontab -; karena kesalahan yang menghapus crontab saya sebagai gantinya. Saya belajar banyak hari itu.
Lumberjack

Jawaban:

64

Mungkin berguna untuk mencatat bahwa pekerjaan dalam crontab pribadi ( crontab -e) selalu dijalankan sebagai pemiliknya, di mana /etc/crontabberisi <user>bidang wajib tambahan yang memungkinkan admin untuk mengonfigurasi pekerjaan agar dijalankan sebagai pengguna non-root.

Mengedit crontab sistem atau menyiapkan crontab pribadi untuk root mungkin sedikit lebih portabel, tidak spesifik untuk distribusi Linux tertentu dan mungkin lebih nyaman bagi seseorang untuk memelihara, dengan semua pekerjaan dalam satu file tetapi:

Secara pribadi saya mendukung opsi ketiga : untuk setiap drop tugas yang dijadwalkan

  • sebuah file /etc/cron.d/dengan potongan cron
  • executable (skrip) di /etc/cron.[hourly |daily |weekly |monthly]direktori yang relevan .

Itu lebih mudah untuk skrip (Anda hanya dapat membuat / menimpa / menghapus file seperti itu dan Anda tidak perlu muck dalam isi file crontab tunggal) dan yang bekerja dengan baik dengan tool manajemen konfigurasi dan itulah yang sudah dilakukan manajer paket lakukan pula.

Pekerjaan / skrip di /etc/cron.[hourly |daily |weekly |monthly]selalu dieksekusi sebagai root, di mana potongan cron di /etc/cron.d/memungkinkan pengaturan jadwal kustom maupun berjalan sebagai pengguna yang berbeda dengan <user>bidang wajib yang sama ditemukan di /etc/crontab.

HBruijn
sumber
18
Kelemahan dari pengeditan /etc/crontabadalah bahwa suatu penggabungan akan diperlukan setiap kali Anda memperbarui cronpaket. Anda tidak memiliki masalah itu jika Anda hanya menambahkan file baru ke salah satu /etc/cron.*direktori.
kasperd
1
Anda harus menambahkan bahwa di sebagian besar distro /etc/cron.[hourly |daily |weekly |monthly]menyimpan executable sambil /etc/cron.dmemegang crontab. Selain itu, +1.
GnP
Saya pasti penggemar direktori cron. [Timing], saya jarang membutuhkan sesuatu yang lebih terperinci daripada opsi commn. Meskipun harap dicatat bahwa beberapa distro, terutama Ubuntu, akan secara diam-diam mengabaikan skrip dengan ekstensi file di folder ini (bug yang cukup menjengkelkan di internet, mengingat kebanyakan orang akan menambahkan .sh, yang mungkin telah diperbaiki di distro terbaru). Sangat sulit untuk mengetahui mengapa skrip tidak berfungsi dalam situasi itu - setidaknya menambah crontab dijamin untuk dieksekusi.
Gargravarr
15

Seingat saya, crontab -ememiliki keuntungan tambahan yang memverifikasi sintaks crontab sebelum menginstalnya, dan akan kesalahan dan mengembalikan sebelumnya jika Anda membuat kesalahan. Dengan cara ini, apa pun yang sebelumnya berfungsi tidak akan tiba-tiba berhenti jika Anda salah sintaks. Saya pikir praktik terbaik adalah dengan menggunakan utilitas, seperti menjalankan visudodaripada mengedit /etc/sudoerssecara langsung.

Gargravarr
sumber
2
+1 Poin bagus tentang validasi sintaksis, meskipun mengakui beberapa kesalahan sintaksis juga jauh dari bukti bodoh (artinya dengan senang hati Anda akan memasukkan /etc/crontabbaris dengan nama pengguna di kolom ke-6). - Meskipun saya ingin berargumen bahwa menggunakan alat interaktif bukanlah "praktik terbaik" , Anda harus mengotomatiskan dengan alat-alat seperti Wayang / Garam / Kemungkinan dll. Dan tidak boleh mengkonfigurasi server dengan tangan lagi di tempat pertama. Di sisi lain jika Anda jadul, maka memang menggunakan alat Anda.
HBruijn
Ansible dan yang lain bagus jika Anda mengkonfigurasi 5+ server, tetapi tidak sepadan dengan kerumitan hanya 1. Anda bisa berargumen bahwa dengan hanya 1 server, skrip Ansible memberi Anda kemampuan untuk membangunnya kembali secara identik ketika gagal 2 tahun kemudian, tetapi pada saat itu skrip cenderung tidak berfungsi lagi karena perubahan distro / repo.
marcv81
Inilah alasan saya sangat tidak setuju dengan jawaban yang diterima. Perubahan apa pun yang dibuat harus dijalankan melalui proses validasi ini setidaknya satu kali. Jika seseorang menyalin baris dari crontab baru dan menyediakannya ke alat otomatis untuk disebarkan ke server lain, maka itu yang terbaik dari kedua dunia.
Monty Harder
Tidak membantu jika meluncurkan skrip, dan ada kesalahan dalam skrip, sehingga pengujian run kering diperlukan.
mckenzm
@ mckenzm setuju, tapi hanya ada begitu banyak pemeriksaan idiot yang bisa Anda terapkan :)
Gargravarr
2

Ini benar-benar pertanyaan gaya, ada alasan beberapa metode ditawarkan oleh OS. Bersikaplah konsisten dan jangan campur aduk jika Anda tidak ingin membingungkan orang lain (atau diri Anda sendiri setelah beberapa saat tidak berurusan dengan sistem) - jika sulit untuk melihat tugas apa yang sebenarnya dijadwalkan di seluruh host, cenderung berakhir dengan kejutan yang tidak menyenangkan.

pemeras
sumber
2

Untuk memastikan menambahkan pekerjaan cron yang memerlukan hak pengguna tertentu, saya pribadi menggunakan perintah berikut:

 # crontab -u <user> -e

Anda juga bisa menambahkan sudo.

Seperti yang dikatakan @rackandboneman, tidak perlu dipusingkan dengan file /etc/cron.d/. Jika masalahnya adalah tentang pekerjaan cron pengguna, gunakan fitur crontabperintah.

aesnak
sumber
3
-1 Kerugian besar dari melakukan hal di atas adalah bahwa pengguna sekarang dapat memodifikasi / menghapus / menghancurkan cronjob juga, yang biasanya tidak diinginkan ketika Anda sebagai admin menghabiskan waktu berharga Anda mengatur segalanya ... Juga ketika pengguna adalah akun layanan dan akun itu dikunci / kedaluwarsa layanan akan terus berjalan tetapi tab cron pribadi untuk akun yang terkunci biasanya akan dinonaktifkan.
HBruijn
Jika pengguna yang ditentukan di sini adalah pengguna publik seperti anggota lingkungan layanan terminal publik, Anda benar. Namun, jika masalahnya adalah tentang pengguna layanan / agen ... pada pemikiran kedua, itu benar-benar tentang gaya.
aesnak