Linux’ta Cron’un zamana dayalı zamanlayıcısıyla çalışırken, görevleri bir dakikadan daha kısa aralıklarla yürütmeniz gerektiğini hissedebilirsiniz. Ancak Cron’un yerel yetenekleri bu tür ayrıntılı planlamaya izin vermez. Varsayılan olarak Cron’un en küçük aralığı bir dakikadır. Bu, görevlerin birkaç saniyede bir veya daha kesin bir zaman aralığında çalıştırılması gereken belirli uygulamalar için sınırlayıcı olabilir. Bu makalede, bu sınırlamanın üstesinden gelmek ve görevleri bir dakikadan kısa aralıklarla başarılı bir şekilde zamanlamak için birden fazla yöntemi inceleyeceğiz.
1 Dakikadan Kısa Aralıklı İşleri Yürütme Yöntemleri
Bir dakikadan daha kısa aralıklarla işin yürütülmesini sağlamak için çeşitli yöntemler vardır. Her yöntemin kendine has avantajları vardır ve farklı kullanım durumları için uygundur. Aşağıda kullanabileceğiniz üç yöntem bulunmaktadır.
- Bash Komut Dosyasında While Döngüsü Kullanmak: Bir görevi bir dakikadan kısa aralıklarla yürütmenin en basit yollarından biri Bash betiğinde while döngüsü kullanmaktır. Bu yöntem, sürekli çalışan bir komut dosyası yazmayı, bir komutu yürütmeyi ve ardından belirli bir saniye boyunca uyumayı içerir.
#!/bin/bash while true; do # Your command here sleep 10 done
Bu yöntemde while true döngüsü betiğin süresiz olarak çalışmasını sağlar. Sleep 10 komutu, betiği her yineleme arasında 10 saniye duraklatır ve görevin her 10 saniyede bir yürütülmesine izin verir. Bu yöntem basittir ancak sürekli çalıştığı için daha fazla CPU kaynağı tüketir.
- Systemd Zamanlayıcılarını kullanma:
SİSTEM ZAMANLAYICI HASSASİYETİ
Systemd zamanlayıcıları, görevleri dakikadan kısa aralıklarla zamanlamak için uygundur, ancak kesin zamanlama sunmayabilirler. Sistem yükü, yürütme süresi ve zamanlayıcı ayrıntı düzeyi gibi faktörler hafif gecikmelere yol açarak aralığın belirtilenden biraz daha uzun olmasına neden olabilir. Kesin zamanlama gerektiren kritik görevler için alternatif çözümleri değerlendirin veya aralığı buna göre ayarlayın.Systemd zamanlayıcıları, görevleri dakikadan kısa aralıklarla zamanlamak için Cron’a daha verimli ve esnek bir alternatif sağlar. Systemd zamanlayıcıları özellikle hassas zamanlama ve daha düşük kaynak tüketimi gerektiren görevler için çok uygundur. Aşağıda, bir systemd hizmeti oluşturmak için ayrıntılı adımlar ve görevinizi kesin bir aralıkta yürütmek için karşılık gelen bir zamanlayıcı bulunmaktadır.
1.
Hizmet Dosyasını Oluşturun:
– Öncelikle /etc/systemd/system/mytask.service adresinde bir hizmet dosyası oluşturun. Bu hizmet dosyası, çalıştırmak istediğiniz gerçek görevi veya komut dosyasını tanımlar. /path/to/your/script.sh dosyasını betiğinizin gerçek yolu ile değiştirin.
– Bu örnekte hizmetin adı mytask.service’dir. Açıklama alanı, hizmetin ne yaptığına ilişkin kısa bir açıklama sağlar.
– ExecStart alanı, hizmet tarafından yürütülecek komutu veya betiği belirtir.[Unit] Description=Run My Task [Service] ExecStart=/path/to/your/script.sh
2.
Zamanlayıcı Dosyasını Oluşturun:
– Daha sonra /etc/systemd/system/mytask.timer konumunda ilgili bir zamanlayıcı dosyası oluşturun. Bu zamanlayıcı dosyası, görevin ne sıklıkta çalıştırılacağını kontrol eder.
– OnBootSec=10 yönergesi, zamanlayıcının sistem başlatıldıktan 10 saniye sonra başlamasını sağlar.
– OnUnitActiveSec=10 yönergesi, görevi, hizmetin son yürütülmesinden sonra her 10 saniyede bir çalışacak şekilde zamanlar. İstediğiniz aralığı ayarlamak için bu değeri ayarlayın.
– WantedBy=timers.target alanı, sistem önyüklendiğinde zamanlayıcının otomatik olarak başlatılmasını sağlar.[Unit] Description=Run My Task Every 10 Seconds [Timer] OnBootSec=10 OnUnitActiveSec=10 [Install] WantedBy=timers.target
3.
Systemd’yi yeniden yükleyin ve Zamanlayıcıyı Etkinleştirin:
– Her iki dosya da oluşturulduktan sonra, aşağıdakileri çalıştırarak yeni hizmeti ve zamanlayıcıyı tanımak için sistem yöneticisi yapılandırmasını yeniden yükleyin:# systemctl daemon-reload
– Ardından zamanlayıcının açılışta otomatik olarak başlamasını sağlayın:
# systemctl enable mytask.timer
– Son olarak zamanlayıcıyı ilk kez manuel olarak başlatın (isteğe bağlı):
# systemctl start mytask.timer
4.
Zamanlayıcı Durumunu Kontrol Edin:
– Zamanlayıcınızın doğru şekilde çalıştığını doğrulamak için durumunu aşağıdakilerle kontrol edebilirsiniz:# systemctl status mytask.timer
– Bu komut size zamanlayıcının etkin olup olmadığını ve bir sonraki çalışmasının ne zaman planlandığını gösterecektir.
5.
Zamanlayıcı Günlüklerini İnceleyin:
– Journalctl komutunu kullanarak hem hizmetin hem de zamanlayıcının günlüklerini de inceleyebilirsiniz:# journalctl -u mytask.service
– Bu, görevin yürütülmesi ve olası sorunlar hakkında ayrıntılı bilgi sağlayacaktır.
Bu kurulumda servis birimi yürütülecek görevi tanımlarken, zamanlayıcı birimi yürütme sıklığını kontrol eder. Zamanlayıcı ünitesindeki OnUnitActiveSec=10 yönergesi görevin 10 saniyede bir çalışmasını sağlar. Bu yöntem, while döngüsü kullanmaktan kaynak açısından daha verimlidir çünkü hassas planlama için systemd’nin yerleşik yeteneklerinden yararlanır.
- Sleep ile Crontab Hack’i Kullanma: Görevleri bir dakikadan kısa aralıklarla yürütmenin başka bir yöntemi de uyku komutuyla birlikte bir Crontab girişi kullanmaktır. Bu yöntem, görevin yürütülmesini aynı dakika içinde kademeli olarak gerçekleştirmenize olanak tanır.
* * * * * /bin/bash -c 'command1; sleep 15; command2; sleep 15; command3'
Bu örnekte Cron işi her dakika çalışıyor ancak uyku komutları sonraki komutların yürütülmesini geciktirmek için kullanılıyor. Bu, görevi etkili bir şekilde aynı dakika içinde daha küçük aralıklara böler. Bu yöntem gerçek dakika altı planlamayı sağlamasa da, kesin zamanlamanın kritik olmadığı belirli senaryolar için yararlı olabilir.
Yazının orijinalini buradan okuyabilirsiniz.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.