Birden çok @ günlük crontab girişi sırayla sırayla işleniyor mu?


22

İki işin, her gün, seri olarak, tam olarak belirttiğim sırayla çalışmasını istiyorum. Bu crontab istediğimi güvenilir bir şekilde yapar mı?

@daily job1
@daily job2

Onlar birbiri ardına farz ediyorum, ama Web'de arama yaparak ya da bu man sayfalarını herhangi birinden cevap bulmak açamadı: cron(1), crontab(1), crontab(5).

Yukarıdaki crontab, cron @dailyparalel olarak veya öngörülemeyen bir sırada planlanan şeyleri çalıştırırsa istediğimi yapmaz .

Onları sırayla kovmak için tek bir kabuk betiği yapabileceğimi biliyorum, sadece cronun nasıl çalışması gerektiğini merak ediyorum (ve test verilerini toplamak veya kaynak kodu okumak için çok tembelim).

Cron cronpaket tarafından sağlanır . İşletim sistemi Ubuntu 10.04 LTS'dir (sunucu).


cronPaketin hangi cronu sağladığını biliyor musunuz ? Bildiğim cronların hemen hemen hepsi bunu sıralı olarak ve eşzamanlı olarak işleyecektir, genellikle her dosyayı ilk önce alfabetik sıraya göre sıralar (bazıları artan sıradaki sıralamalar arasında zamana göre yapsa da) ve ardından sıradaki sıraya giren işleri yapar.
Chris Down,

5
Belirtilmemiş olması, genellikle uygulamaya bırakıldığı anlamına gelir ve genellikle bu tür davranışlara bağlı olmamak en iyisidir. Muhtemelen daha temiz ve daha iyi organize edilmiş, bir dizinin ayrı crontab girişleri yerine kendi komut dosyasında önemli olduğu bir iş dizisi koymak.
jw013

@ChrisDown: Vixie Cron, sanırım. packages.ubuntu.com/lucid/cron
Adam Monsen

1
Onları gerçekten sırayla çalıştırmak istersen, bir dakika sonra bir tane çalıştırmasını öneririm.
Kevin,

@ jw013 ve Kevin: kabul etti, ama bu benim sorum değil.
Adam Monsen,

Yanıtlar:


26

Kaynağa kısa bir bakıştan sonra (aynı sürüm olduğunu düşündüğüm Debian sıkıştırmasında), belirli bir dosyadaki girişlere benziyor ve aynı zamanda sırayla çalıştırılıyor. Bu amaçla @dailyve 0 0 * * *aynıdır (aslında bu cron @dailyile aynıdır 0 0 * * *).

Bunun karşısında tahtaya güvenmem. Bir gün birinin, boşta çalışan 31 çekirdeğe sahip olan 32 çekirdekli işlemcilerden yararlanmak için cron'un paralel işler yapması gerektiğine karar vermesi mümkündür. Bu, cron kaynağında karşılaşılan bu 20 yaşındaki todo öğesinin uygulanması sırasında yapılabilir:

Bunların hepsi işaretlenmeli ve yük sınırlandırılmalıdır; yani, "saate *" * * * * "anlamında @ saat yerine" saatin önüne yaklaşın ama 'sistem yükü düşük oluncaya kadar "anlamına gelmez. (…) (Vix, jan90)

@daily job1; job2Buraya yazmak çok kolay . İşlerin sırayla yürütülmesi önemliyse, yazdıklarınızın doğrudan bir sonucu haline getirin.

Ek olarak, siparişi açık yapmak, gelecekteki bir yöneticinin, önemli olmayacağını düşünerek çizgileri yeniden sıralama riskini ortadan kaldırır.


5

http://ss64.com/osx/crontab.html (diğer referansların yanı sıra), @ günlük ifadesinin eşdeğer olduğunu söylüyor

0 0 * * *

Hangi gece yarısında çalıştırmak diyor. Bu tür iki hattın her ikisinin de gece yarısına mümkün olduğunca yakın bir yerde başlatılmasını beklerdim, ilk önce hangisi olacağını garanti etmeden. Jw013'ün yorumundaki önerisine katılıyorum:

Belirtilmemiş olması, genellikle uygulamaya bırakıldığı anlamına gelir ve genellikle bu tür davranışlara bağlı olmamak en iyisidir. Muhtemelen daha temiz ve daha iyi organize edilmiş, bir dizinin ayrı crontab girişleri yerine kendi betiğinde önemli olduğu bir iş dizisi koymak.


Bu yardımcı olur, teşekkürler. @ Jw013'ün önerisinin geçerli olduğunu kabul ediyorum, ancak sorduğum soru bu değil. Sanırım kesin cevap için asıl kaynağa bakmam gerekecek, çünkü bu muhtemelen uygulamaya özel.
Adam Monsen,

0

@Giles, şeyleri sırayla çalıştırmak için içe aktarılırken tek bir komut dosyası kullanmaya yorum yapar.

cron.dailydosyalar çalışma zamanlarını belirtmez. Tecrübelerim seri olarak yayınlandıkları oldu. Bu, bir dizüstü bilgisayarda veya başka bir sistemde çalışabilecek birçok arka plan işi anlamına gelir.

Zamanlar belirtildiğinde, geçerli dakika için planlanan tüm işler çalıştırılır. Farklı zamanlarda kullanmak iyi bir fikirdir.

Karşılıklı olarak dışlayan işleriniz varsa, diğer işin çalışıp çalışmadığını belirlemek için bir kilit dosyası kullanmak yaygındır.


@dailybiraz daha farklı /etc/cron.daily. İlki, bir crontab'da kullanım için alternatif bir sözdizimidir. Ayrıca bir göz atın run-parts. Sistemim run-partsprogramları çalıştırmak için kullanıyor /etc/cron.daily. run-parts(8)Manpage'e göre , "Dosyalar adlarının sözcük sıralama düzeninde çalıştırılıyor ..."
Adam Monsen,
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.