Sunucularda Görevleri Zamanlamak için Linux'ta Cron ve Crontab Nasıl Kullanılır

Sunuculardaki Görevleri Zamanlamak için Linux'ta Cron ve Crontab'ı kullanın

Hiç Linux sunucunuzda tekrarlayan bir görev planlamayı denediniz ve bunu nasıl yapacağınızı bilmiyor muydunuz? Linux sistemlerinde varsayılan olarak bulunan cron ve crontab araçları, belirli bir görevi (veya birkaçını) belirli bir zamanda gerçekleştirmenize izin verecektir ve bu, yürütmek istediğimiz şeyi tam olarak dakikalar içinde programlayabileceğimizdir. ve istediğimiz zaman. Çalıştırmak. Bugün, sunucularınızı doğru bir şekilde yönetebilmeniz için hem Cron hem de Crontab'ın nasıl çalıştığını ayrıntılı olarak açıklayacağız.

Bu iki unsur, durumlarını bilmemize gerek kalmadan yürütülen periyodik görevlerin programlanması söz konusu olduğunda çok önemlidir. Belirli bir anda bir şeyi yürütme konusunda endişelenmemize izin vermeyecek ve işletim sisteminde tamamen otomatik olarak bırakacaktır. Daha önce Cron ve Crontab'dan bahsetmiştik. Her şeyden önce, her iki unsur arasında ne gibi farklılıklar olduğunu göreceğiz. Daha sonra görev eklemeyi öğreneceğiz ve son olarak Cron işlerinin yönetimini inceleyeceğiz.

Cron ve Crontab arasındaki farklar

Aynı şeyden bahsediyoruz gibi görünse de, durum böyle değil ve iki unsur birbirine bağımlı olarak kabul edilebilir. Daha açık olmak gerekirse, Linux sistemlerinde görev zamanlamasını mümkün kılmaktan sorumludurlar. Şu anda herhangi bir Linux tabanlı işletim sistemi, farklı görevleri bizim ilgilenmemize gerek kalmadan tekrar tekrar programlamak için her iki araca da sahiptir.

Cron nedir?

Cron, işletim sisteminin önyüklendiği andan itibaren çalışan bir arka plan programıdır (arka plan işlemi). Cron, işletim sisteminin kendisinde yapılandırılan zamana göre yürütülecek herhangi bir görev (iş) olup olmadığını kontrol etmekten sorumlu olacaktır. Saatin ve ayrıca saat diliminin doğru yapılandırılması çok önemlidir, aksi takdirde Cron tarafından yapılan işlemler ayarlarımıza uymaz.

İşletim sistemimizin doğru yapılandırıldığından emin olmak için mevcut NTP (Ağ Zaman Protokolü) sunucularından saati otomatik olarak almanız çok önemlidir. İşletim sistemimizde doğru saatin olup olmadığını, hangi saat diliminde olduğumuzu ve sistem saatinin NTP sunucuları ile doğru bir şekilde senkronize edilip edilmediğini kontrol etmek için aşağıdaki komutu uygulayabiliriz:

timedatectlAşağıdaki gibi bir şey görmeliyiz:

Gördüğünüz gibi, tüm saatler mükemmel bir şekilde eşleşiyor ve zaman doğru, bu çok önemli, aksi takdirde “Cronlar” yürütülmemesi gereken saatlerde yürütülecektir. Saat dilimini doğru yapılandırmadığımız durumda, aşağıdaki komutla doğru şekilde yapılandırabiliriz:

timedatectl set-timezone Europe/MadridLinux işletim sisteminin kurulumu ile istediğimiz NTP sunucuları otomatik olarak konfigüre edilir, arıza durumunda veya bu NTP sunucularını değiştirmek istediğimizde, ilgili servisi yükleyip /etc/ntp içinde konfigüre ederek bunu yapabiliriz. .konf.

Dağıtıma bağlı olarak, Cron aşağıdakileri kullanmaya başlar: /etc/rc.d/ or /etc/init.d klasörler ve her dakika kontrol eder / vb / crontab or  / var / makara / cron sahip olabileceğimiz olası infazlar için dosyalar. programlanmış.

Crontab nedir?

Crontab bir metin dosyasıdır, özel içeriğe sahip bir dosyadır ve özellikle Cron tarafından doğru bir şekilde okunması ve programladığımız yürütmeye devam etmesi için tasarlanmıştır. Crontab, yürütülecek tüm komut dosyalarını içeren bir listeye sahiptir, genellikle sistemin her kullanıcısı kendi Crontab dosyasına sahiptir, bu şekilde, her kullanıcı, her zaman gitmemize gerek kalmadan kendi tekrarlayan görevlerini bağımsız olarak planlayabilir. yönetici kullanıcı. Bu şekilde, herhangi bir kullanıcı (yöneticiler dahil) farklı yürütmeleri gerçekleştirmek için tekrarlayan görevleri zamanlayabilir.

Kendi dosyasını oluşturmak için her kullanıcı “crontab” komutunu kullanmalıdır (evet, aynı isimdir).

Crontab'a görevler ekleyin

Görevleri yürütebileceğimiz gerçeğinden yola çıkarak, öncelikle, query.sh adını vereceğimiz çok basit bir script yapılandıracağız, bu scripti «Masaüstümüze» veya «Belgeler»e koyacağız, "nano" metin düzenleyicisini koymak istediğimiz yerde doğrudan çalıştırabilir:

nano consulta.shKomut dosyasının içeriği aşağıdaki gibi olacaktır:

#!/bin/bashsudo ls -l / > archivoResultado.txt

Temelde mevcut dizinin dosya ve dizinlerini listeleyen ve bir metin dosyasına aktaran bir program olan betiği programladıktan sonra, onu Cron tarafından doğru bir şekilde yürütebilmesi için yürütme izinleri vermeliyiz, aksi takdirde yürütme izinlerine sahip değil:

chmod ugo+x consulta.shBu yön çok önemlidir, aksi takdirde komut asla yürütülmeyecektir.

Görevleri içeren dosyayı düzenlemenin zamanı geldi. Bunun için crontab -e komutunu kullanacağız. Aşağıdaki yapıyı buluyoruz:

linux-cron-crontab-add-periyodik görevler

5 yıldız ve yürütülecek komut. 5 yıldızın her biri şu anlama gelir:

  • m: dakika
  • sa: saat
  • güneş: haftanın günü
  • pzt: ay
  • dow: ayın günü

Bu değişkenlerin her birinin benimseyebileceği değerler görseldedir. Örneğin, ikincisi durumunda, İngilizce olarak yazılan günlerin adının kullanılmasına izin verilir. Bir önceki resimde görünmese de komut ile son yıldız (gün) arasında dosyanın sahibini belirtmek gerekir.

Açık olmak gerekirse, bazı örnekler kullanacağız:

Her gün öğleden sonra saat 7'de script.sh sorgusunu yürütmek istiyorsak, crontab'da aşağıdakileri içeren bir satır belirtmemiz gerekecek:

00 19 * * * usuario /ubicacion/del/script/consulta.shHer Pazar öğleden sonra 7'de koşmak istiyorsak:

00 19 * * 0 usuario /ubicacion/del/script/consulta.shKomut dosyasını her 4 Şubat'ta saat 7:XNUMX'da çalıştırın:

00 19 4 2 * usuario /ubicacion/del/script/consulta.shLinux'ta, Crontab'ın kendisinde belirli dönemlerde işlemleri yürütmek için ayrılmış bazı metin dizeleri olduğu söylenmelidir, bu çok yardımcı olacaktır:

  • @reboot: Bir kez ve bilgisayar başlar başlamaz yürütün.
  • @yearly: yılda yalnızca bir kez çalışır: 0 0 1 1 *
  • @aylık: ayda bir kez çalıştırın ve ilk gün: 0 0 1 * *
  • @weekly: her hafta, haftanın ilk saatinin ilk dakikası: 0 0 * * 0.
  • @daily: her gün gece 12'de: 0 0 * * *
  • @midnight: Yukarıdakiyle aynı etkiye sahiptir.
  • @hourly: ilk dakikanızdaki tüm saatler: 0 * * * *

Formatın ne olacağını söylememize rağmen, crontab -e kullanılırken bu terimler dönemi tanımlamak için kullanılabilir.

Cron işleri yönetimi

Crontab'ın çalışması çok basittir, gördüğümüz gibi, şimdi size Linux işletim sistemlerinde Crontab'ın çalışmasını kontrol etmek için bazı temel komutları öğreteceğiz.

Mevcut dosyayı kullanıcı tarafından tanımlanan başka bir dosyayla değiştirmek için aşağıdaki komut kullanılmalıdır:

crontab archivoHalihazırda var olan dosyayı düzenlemek için, bu makale boyunca daha önce gördüğümüz komut kullanılır:

crontab -eKullanıcının crontab'ındaki mevcut tüm görevleri listeleyin:

crontab -lYapılandırılan crontab'ı silin:

crontab -dcrontab dosyasının saklanacağı dizini tanımlayın. Bu işlemi gerçekleştirmek için söz konusu dizinde yürütme izinlerine sahip olmanız gerekir:

crontab -c dirSistemdeki diğer mevcut kullanıcıların crontab'ını işleme talimatı:

crontab -u usuarioGördüğünüz gibi, görevlerin yürütülmesini planlamak karmaşık değildir ve bu eğitimde belirtilen her şey açıksa hızlı bir şekilde yapılabilir.