Neden dakikada cron.d işim çalışmıyor?


33

Her dakika çalıştırmak için bir python senaryosu almaya çalışırken bir sürü dart fırlattım. Bu yüzden sadece dakikada bir "işe yarayabilecek en basit şeyi" yapmayı basitleştireceğimi düşündüm (debian / test yapıyorum).

İçinde tek bir satır dosyası oluşturdum /etc/cron.d/perminute:

* * * * * /bin/touch /home/me/ding_dong

Bu root tarafından sahip olunan ve çalıştırılabilir (bu konuların ikisinden de emin değil). Ve sonra yaptım:

sudo service cron reload

Ardından arkanıza yaslanın ve ls -ltrtekrar tekrar giriş dizinimde ( /home/me) çalışmaya başlayın . Ama ding_dong dosyam hiç görünmüyor. Bunu yaparsam sudo /bin/touch /home/me/ding_donghemen ortaya çıktığını biliyorum .

Açıkçası burada aptalca bir şey eksik.


3
Cron.d'deki değişikliği uygulamak için cron cini servisini yeniden yüklemek genellikle gerekli değildir çünkü her an her dakika yeni ve güncellenmiş dosyalar için dizini yeniden tarar.
Josip Rodin

Yanıtlar:


45

İçine /etc/cron.d/veya içine bir cron yapılandırması eklerken /etc/crontab, komutun hangi bağlamda çalışması gerektiğini kullanıcı adınızı da eklemeniz gerekir.

* * * * * root /bin/touch /home/me/ding_dong

Ve benden sadece bir ipucu: ls -ltrtekrar tekrar koşmaya başlamak zorunda değilsiniz , sadece kullanın watch -n 5 "ls -ltr"ve komutu her 5 saniyede bir (veya istediğiniz 5 ile değiştirerek herhangi bir değeri) çalıştırın.


9
Bu beni doğru yöne yönlendirdi. Başörtüsü anıydı. Düzelttim ve yine de işe yaramadı. man cronBiraz yavaş okuduktan ve DEBIAN specificbölümlere özel dikkat gösterdikten sonra , dosyaların grup halinde veya başka bir yazılabilir OLMAMASI gerektiğini fark ettim . Hayal kırıklığımı bir noktada etkinleştirmiştim.
Travis Griggs

Senaryonun sahibini de root olarak değiştiremez miydin?
Geremia

Bu özel hat bana yardımcı oldu. Kimden man cron: Ayrıca, Debian'da cron, /etc/cron.d dizinindeki dosyaları okur. cron /etc/cron.d içindeki dosyaları / etc / crontab dosyasıyla aynı şekilde ele alır (o dosyanın özel biçimini izlerler, yani kullanıcı alanını içerirler ). Ancak, / etc / crontab öğesinden bağımsızdırlar: örneğin, ortam değişkeni ayarlarını ondan devralmazlar. Bu değişiklik Debian'a özgüdür, aşağıdaki DEBIAN ÖZEL başlığı altındaki notu görün.
harperville,

man 8 cron (Debian'da) ayrıca /etc/cron.d/ içindeki dosyaların sadece '-' ve '_' alfasayısal karakterler içerebileceğini söylüyor. Spesifik olarak, nokta yok.
mpartel

3

Yeni bir croniş oluşturmak için , işi çalıştırmak crontab -eistediğiniz kullanıcı olarak çalıştırmalısınız. Ardından beliren düzenleyici penceresine alakalı satırı ekleyin:

* * * * * /bin/touch /home/me/ding_dong

Yapma şekliniz farklı bir format gerektirir ve yine de iyi bir fikir değil. Crontab'lar /etc/cron.dbiraz farklı bir formata sahipler, altında çalıştırılacak bir kullanıcı adı istiyorlar. Örneğin:

* * * * * USERNAME /bin/touch /home/me/ding_dong

İyi bir hile (@VogonPoetLaureate tarafından önerildiği gibi) cron işlerinin hata ayıklamasına yardımcı olan standart hatasını yakalamaktır. Örneğin:

* * * * * /bin/touch /home/me/ding_dong 2>/tmp/error

6
Cron.d "iyi bir fikir değil" olduğunu söylemek için kesinlikle hiçbir neden yok. Cron cini cron.d stderr çıktısını gayet iyi kullanıcı adına postalayacaktır ve başka bir e-posta adresine yönlendirmek istiyorsanız, MAILTO değişkeni kullanılabilir.
Josip Rodin

@JosipRodin root tarafından çalıştırılmayan ve sizin tarafınızdan ayarlanan şeyler için iyi bir fikir değildir. Çok kullanıcılı bir sistemde bir sysadmin için mantıklı ama kendi makinenizde, her şeyi kendi crontab'ınızda bulundurmak daha kolaydır, böylece crontab -ltüm cron işlerinizi kontrol etmek ve listelemek için tek bir yer vardır .
terdon

Bu, OP'nin gerçekten netleştiremediği sadece kişisel bir cron işi olduğunu varsayar - genel olarak, cron.d aracılığıyla ayarlanan ayrıcalıklı olmayan kullanıcı cron işleri için çok sayıda uygulamanız vardır; kısaltılmış servis kullanıcıları, otomatik dağıtım daha kolaydır, vb.
Josip Rodin

@JosipRodin kesinlikle. Kişisel bir sistem varsaydım çünkü i) kurumsal sistemler burada konu dışı ve ii) soru uzman olmayan bir kullanıcı tarafından önerildi.
terdon

Tamam, sanırım artık superuser ve serverfault ile unix SE siteleri arasındaki ortak karışıklık nedeniyle bunu okumamıştım :)
Josip Rodin

2

Buradaki olası bir hata, tek satırlık bir dosyanın nasıl oluşturulacağıdır. Gönderen Ubuntu Dokümantasyon :

... satırında beş saat ve tarih alanı var, ardından komut ve ardından yeni satır karakteri var .

Örneğin, yaratılışın bu yolu çalışmıyor:

printf "* * * * * /bin/touch /home/me/ding_dong" > /etc/cron.d/ding_dong
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.