/ Etc / crontab dosyasını düzenlemeli mi veya crontab -e dosyasını root olarak mı çalıştırmalıyım?


43

Root olarak çalıştırılması gereken düzenli sistem bakım görevleri yapıyorum. Varsayılan olarak Ubuntu 14.04 LTS ile gelen cron lezzetini kullanmayı planlıyorum.

Bir önceki yöneticinin (şirketten bu yana ayrılan) doğrudan / etc / crontab tarafından düzenlendiğini görüyorum. Bununla birlikte, olası başka bir yaklaşımın crontab -ekök olarak kullanmak olacağını anlıyorum . Birini veya diğerini kullanmak için herhangi bir zorlayıcı argüman var mı, yoksa tercihe bağlı mı?


9
Benim için bu meşru bir en iyi uygulama sorusu gibi görünüyor ve umarım kapanmaz. Şimdiden cevaplarda konuyla ilgili gerçekleri ve yorumlarınızı görebiliyorum.
MadHatter

1
Bir keresinde crontab -l (crontab'ı listelemek için) yazdım ama crontab - yazdım; yanlışlıkla benim crontab silindi. O gün çok şey öğrendim.
Lumberjack

Yanıtlar:


64

Kişisel bir crontab ( crontab -e) içindeki işlerin her zaman kendi sahipleri olarak yürütüldüğünü, burada yöneticinin işi root olmayan bir kullanıcı olarak çalışacak şekilde yapılandırmasını sağlayan /etc/crontabek bir zorunlu <user>alan içerdiğini not etmek yararlı olabilir .

Sistem crontab'ını düzenlemek veya root için kişisel bir crontab oluşturmak, bazı Linux dağıtımlarına özgü değil , bir kişinin tüm işleri tek bir dosyada tutması için muhtemelen daha uygun olmasına rağmen, biraz daha taşınabilir.

Şahsen üçüncü bir seçeneği tercih ediyorum : her planlanmış görev için

  • bir /etc/cron.d/cron pasajı içeren bir dosya
  • ilgili /etc/cron.[hourly |daily |weekly |monthly]dizindeki bir çalıştırılabilir dosya (script) .

Bu komut dosyası daha kolay (bu tür dosyaların üzerine yazabilir / üzerine yazabilir / silebilirsiniz ve tek bir crontab dosyasının içeriğiyle uğraşmak zorunda değilsiniz) ve konfigürasyon yönetimi araçlarıyla iyi çalışır ve bu zaten paket yöneticileridir. Yine de yapıyorum.

İşler / komut dosyaları /etc/cron.[hourly |daily |weekly |monthly]her zaman kök olarak yürütülür; burada cron snippet'leri /etc/cron.d/hem özel bir program ayarlamaya hem de <user>içinde bulunan zorunlu alanla aynı olan farklı bir kullanıcı olarak çalıştırmaya izin verir /etc/crontab.


18
Düzenlemenin bir sakıncası /etc/crontab, cronpaketi her güncellediğinizde bir birleştirme gerekmesidir . /etc/cron.*Dizinlerden birine yeni bir dosya eklerseniz, bu sorunu yaşamazsınız.
kasperd

1
Çoğu dağıtımlardan eklemek gerekir /etc/cron.[hourly |daily |weekly |monthly]tutan yürütülebilir ise /etc/cron.dcrontab dosyalarına tutar. Bunun dışında, +1.
GnP

Kesinlikle cron. [Zamanlama] dizinlerinin hayranıyım, nadiren iletişim seçeneklerinden daha ayrıntılı bir şeye ihtiyacım var. Her ne kadar bazı dağıtımların, özellikle Ubuntu’nun, bu klasörlerde dosya uzantılarına sahip komut dosyalarını sessizce görmezden geleceğini unutmayın (çoğu kişinin son dağıtımlarda sabitlenmiş olan. Bu durumda komut dosyalarının neden çalışmadığını anlamak çok zor - en azından crontab'a ekleme yapmanın garantisi var.
Gargravarr

15

En iyi hatırladığım crontab -ekadarıyla, yüklemeden önce crontab sözdizimini doğrulaması ve bir hata yaparsanız önceki hatayı düzeltip geri yüklemesi avantajına sahiptir. Bu şekilde, daha önce çalışmakta olan hiçbir şey, sözdizimi yanlış yaparsanız aniden durmaz. Bence en iyi uygulama, doğrudan visudodüzenleme yerine çalışan programlar gibi araçları kullanmaktır /etc/sudoers.


2
+1 Sözdizimi doğrulaması hakkında iyi bir nokta olsa da, bazı sözdizimi hatalarını da kabul etse de, aynı zamanda aptallardan da uzaktır (yani /etc/crontab, 6. sütuna kullanıcı adı olan bir satır girmenize izin verecektir ). - İnteraktif araçları kullanmanın "en iyi uygulama" olmadığını iddia etmeme rağmen , Puppet / Salt / Ansible vb. Gibi araçlarla otomatik hale getirmelisiniz ve artık sunucuları el ile yapılandırmamalısınız. Öte yandan, eğer yaşlıysanız, o zaman gerçekten aletlerinizi kullanın.
HBruijn

5+ sunucuyu yapılandırırsanız Ansible ve diğerleri iyidir, ancak sadece 1 için uğraşmaya değmezler. Yalnızca 1 sunucu ile bir Ansible betiğinin size, 2 yıl boyunca başarısız olduğunda aynı şekilde yeniden oluşturma imkanı verdiğini iddia edebilirsiniz. Bu noktada, senaryo artık dağıtım / repo değişiklikleri nedeniyle çalışmaz.
marcv81

Kabul edilen cevaba şiddetle katılmıyorum nedeni budur. Her ne değişiklik yapıldıysa, bu doğrulama süreci boyunca en az bir kez yapılmalıdır. Biri yeni crontab'dan bir satır kopyalar ve onu diğer sunuculara yaymak için otomatik bir araç sağlarsa, o zaman her iki dünyanın da en iyisidir.
Monty Harder

Bir betiği başlatırken hiçbiri yardımcı olmaz ve komut dosyasında hatalar vardır, bu nedenle kuru çalışma testi her iki şekilde de gereklidir.
mckenzm

@mckenzm kabul etti, ancak uygulayabileceğiniz çok fazla aptal prova var :)
Gargravarr

2

Bu gerçekten bir stil sorusudur, işletim sistemi tarafından çoklu yöntemler önerilmesinin bir nedeni vardır. Sadece tutarlı olun ve bir başkasını karıştırmak istemezseniz (veya sistemle ilgilenmediğiniz bir süre sonra kendiniz) karıştırmak istemiyorsanız - tüm ana bilgisayarda hangi görevlerin gerçekte planlanmış olduğunu görmek zorsa, kötü sürprizlerle bitmek.


2

Belirli bir kullanıcının haklarını gerektiren bir cron işi eklediğinizden emin olmak için, şahsen aşağıdaki komutu kullanıyorum:

 # crontab -u <user> -e

Siz de ekleyebilirsiniz sudo.

@Rackandboneman'ın belirttiği gibi, /etc/cron.d/ dosyalarını karıştırmaya gerek yoktur. Mesele kullanıcının cron işleri ile ilgiliyse, crontabkomutun özelliklerini kullanın.


3
-1 Yukarıdakileri yapmanın en büyük dezavantajı, kullanıcının şimdi cronjob'ı da değiştirebilmesi / silebilmesi / kırabilmesidir; bu, yönetici sizin değerli zamanınızı ayarlamak için harcadığınızda genellikle arzu edilmeyen bir durumdur. kullanıcı bir hizmet hesabıdır ve bu hesap kilitlidir / süresi dolmuşsa, hizmet çalışmaya devam eder ancak kilitli hesaplar için kişisel cron sekmeleri genellikle devre dışı kalır.
HBruijn

Burada belirtilen kullanıcı, genel terminal hizmeti ortamının bir üyesi gibi genel bir kullanıcıysa, haklısınız. Bununla birlikte, mesele bir servis / acentanın kullanıcısı hakkındaysa ... ikinci düşünceye göre, gerçekten stil ile ilgilidir.
aesnak
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.