Cron ve Crontab ile Linux'ta Görevler Nasıl Planlanır

Cron ve Crontab ile Linux'ta Görevler Nasıl Planlanır

Bunu biliyor muydun Bıçak Sırtı 2019'da mı belirlendi? Bundan üç yıl sonra! Lafı olmaz Geleceğe Dönüş 2 2015'e kadar zaman yolculuğu yaptıkları yer. Yine de uçan arabalarımız yok ve aramızda kopya yok (bildiğim kadarıyla).





Geleceğin kurgusal tasvirleriyle karşılaştırdığımızda, mevcut teknolojiyle hayal kırıklığına uğramak kolaydır. Yine de bugünlerde telefonlarımız, bilgisayarlarımız ve hatta evlerimiz harika şeyler yapabiliyor. Görevleri otomatikleştirme yeteneği bunlardan biridir.





Her Linux kullanıcısı, sistemle ilgili olsunlar (eski günlükleri temizlemek ve paketleri güncelleme ) veya kullanıcıya hizmet vermek (e-postayı kontrol etmek, podcast'leri indirmek...). Windows kullanıcıları, Windows 95'ten beri Görev Zamanlayıcı'ya sahiptir. Linux'ta aynı işi yapan yardımcı programa cron denir ve burada nasıl kullanılacağını açıklayacağız.





dizüstü bilgisayarların aşırı ısınması nasıl önlenir

Cron Nedir?

Cron, arka planda çalışan, zamanlanmış görevleri kontrol eden ve bulursa bunları yürüten bir sistem hizmetidir. ' cron işleri' olarak da adlandırılan görevler, cron'un her dakika taradığı özel yapılandırma dosyalarında (crontab'lar) tanımlanır. Farklı Linux dağıtımlarında çeşitli cron sürümleri bulunabilir. Örneğin, Fedora'nın cron çatalına denir ahbap , ve ayrıca var fcron , bcron , ve dcron . Bazıları ekstra özelliklere sahipken, diğerleri daha çok güvenliğe odaklanmıştır, ancak hepsi aynı fikre dayanmaktadır.

Bu kılavuz, cron'un en yaygın sürümü olan ve Ubuntu ve türevlerinde bulacağınız vixie-cron için yazılmıştır. Talimatların çoğu diğer cron uygulamaları için de geçerli olsa da, küçük farklılıklar olabilir, bu nedenle geçiş yapmaya karar verirseniz kılavuzlarına bakın.



Crontab Nedir?

Zamanınızı yönetme konusunda ciddiyseniz, muhtemelen bir tür takviminiz vardır - bir uygulama veya en azından bir kağıt parçası. Crontab, bilgisayarınızın takvimine çok benzer. Zamanlanmış görevler hakkındaki bilgileri tutar ve cron'a hangi komutların ne zaman çalıştırılacağını söyler.

Aslında, sisteminizde birkaç crontab var. Her kullanıcının root (yönetici) dahil olmak üzere kendi crontab'ı vardır. Kullanıcı crontab'ları şurada saklanır:





/var/spool/cron/crontabs/

. NS

crontab -l

komutu, geçerli kullanıcı için crontab dosyasını listeler. Kök crontab'ı ile kontrol edebilirsiniz.





sudo crontab -l

.

Ek olarak, sistem crontab dosyası var

/etc/crontab

sistem genelindeki görevler için kullanılır. Genellikle, içine yerleştirilmiş yürütülebilir, köke ait komut dosyaları biçimini alırlar.

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, ve

/etc/cron.monthly/

klasörler ve bazı dağıtımlarda,

/etc/cron.d/

klasör de. Genel olarak konuşursak, çoğu yüklü uygulamalar tarafından otomatik olarak oluşturulduğundan bu görevlerle uğraşmanıza gerek yoktur.

Cron ile Görevler Nasıl Zamanlanır

Kulağa basit geliyor: görevleri planlamak için bunları crontab'ınıza eklemeniz yeterli. crontab özel bir yapılandırma dosyası olduğundan, manuel olarak düzenlenmesi önerilmez. Bunun yerine,

crontab -e

emretmek. Kök veya diğer kullanıcıların crontab'larını düzenlemek için komutu yönetici ayrıcalıklarıyla çalıştırın ve -u seçeneğinden sonra kullanıcı adlarını ekleyin:

sudo crontab -u root -e
sudo crontab -u username -e

crontab dosyasının iki bölümü vardır. İlki, otomatik olarak ayarlanan ortam değişkenlerini içerir. PATH, HOME ve SHELL değişkenlerini güvenle değiştirebilir ve MAIL değişkenini değiştirebilirsiniz.

Dosyanın ikinci kısmı, zamanlanmış görevlerinizle birlikte gerçek 'zaman çizelgesi'dir. Her görev, aşağıdaki değerleri temsil eden sütunlarla tabloda bir satır (satır) kaplar:

Görevleri başarılı bir şekilde zamanlamak için crontab sözdizimi hakkında biraz bilgi sahibi olmanız gerekir:

  • Sayılar tamsayı (tam sayılar) olmalıdır ve herhangi bir sütunda yıldız işaretini (*) joker karakter olarak kullanabilirsiniz, yani 'her dakika/gün/ay...'.
  • 'Ayın Günü' sütununda, 'Ay' sütununda belirtilen ayda (örneğin, 30 Şubat) gerçekleşmeyen bir tarih belirlememeye dikkat edin.
  • Hem 'Ay' hem de 'Haftanın Günü' sütunları sırasıyla aylar ve günler için kısa adları kabul eder ve büyük/küçük harfe duyarlı değildir.
  • 'Haftanın Günü' sütununda hem 0 hem de 7 Pazar anlamına gelir. 'Saat' sütunu, 'askeri saat' (24 saat) biçimini gerektirir, ancak 24 sayısını kullanamazsınız -- bunun yerine 0, 00:00 anlamına gelir. Bunun nedeni, dakika, saat ve haftanın günü değerlerinin başlangıç ​​olmasıdır. 1 yerine 0'da.
  • Saniyeler desteklenmez, bu nedenle belirli bir saniyede bir görev planlayamazsınız.

Yapabileceğiniz şey, kısa çizgi kullanarak kapsayıcı zaman aralıkları planlamaktır ('Saatler' altındaki 14-22, görevi 14:00 ile 22:00 arasında sürekli olarak çalıştıracaktır) veya virgülle ayrılmış bir liste tanımlayarak tek bir görevi birkaç kez çalıştırmaktır (1, 'Haftanın Günü' altındaki 3,5, görevi Pazartesi, Çarşamba ve Cuma günleri çalıştıracaktır).

Bu arada, adım değerleri bir eğik çizgi (/) ile temsil edilir ve bunlar bir aralıktaki atlama miktarını gösterir; örneğin, 'Saatler' altındaki 3-20/3, görevi sabah 3'ten akşam 8'e kadar her üç saatte bir çalıştıracaktır. Bu, görevleri her X saatte bir tekrarlamak istediğinizde kullanışlıdır, çünkü bir yıldız ve bir adımı (*/X) birleştirebilirsiniz. Sayıları kullandığınız sürece aralıkları listelerle ve adımları aralıklarla birleştirebilirsiniz. Diğer bir deyişle, 'jan-mar' veya 'Tue,Cum-Sun' gibi kombinasyonlara izin verilmez.

Alternatif olarak, her sütun için bir değer ayarlamak yerine, bir satırın başına @weekly, @yearly, @monthly, @daily veya @hourly yazıp ardından bir komut yazabilirsiniz. Bu şekilde zamanlanan görevler, olası ilk örnekte çalışır, bu nedenle @weekly haftanın ilk günü gece yarısında çalışır. Sistem (yeniden) başladığında hemen bir görevi çalıştırmak istiyorsanız, @reboot komutunu kullanın.

Bu örnekte, her gün 08:20 ve 20:20'de bir yedekleme planladık. Duvar kağıdı her üç günde bir saat 19:00'da otomatik olarak değişir ve bir komut dosyası her Pazartesi 10:20 ve 20:20'de yeni podcast'leri kontrol eder. 25 Mart için bir doğum günü hatırlatıcısı ayarlandı ve belirtilen zaman çerçevesi içinde her 30 dakikada bir çalışır. Son olarak, bir komut dosyası e-postayı 8'den 20'ye kadar her 15 dakikada bir kontrol eder, ancak yalnızca iş günlerinde. Crontab'ınızı sütunlar arasında boşluklar ve sekmelerle düzenlemekte özgürsünüz, ancak bunların içinde değil (virgül, kısa çizgi ve eğik çizgi arasına boşluk koymayın).

Tüm bunlar size çok karmaşık geliyorsa endişelenmeyin - her zaman internete güvenebilirsiniz. Gibi araçlar Crontab Oluşturucu , Crontab.gurusu , ve Corntab, herhangi bir crontab sözdizimini bilmeden cron işleri oluşturmanıza yardımcı olur. İşin bir sonraki ne zaman çalışacağını size gösterirler ve yaygın olarak kullanılan ifadeler için şablonlar sağlarlar. Crontab.guru grubun en iyisidir çünkü crontab sözdizimini canlı olarak test etmenize olanak tanır, böylece değişikliklerinizin zamanlamayı nasıl etkileyeceğini hemen görebilirsiniz.

Cron İşlerinin Yürütülüp Yürütülmediği Nasıl Kontrol Edilir?

Cron'un arka planda sessizce çalışması ve görevlerinizle ilgilenirken sizin rahatsız edilmeden çalışmanıza izin vermesi gerekiyor. Ama gerçekten çalıştığından nasıl emin olabilirsiniz?

Cron'un yerleşik bir e-posta bildirim özelliği vardır, ancak bunun için en azından basit bir yerel posta sunucusu kurulması gerekir. Pek çok ev kullanıcısı bunu yapılandırmaya istekli değildir ve pek çok dağıtım bunu varsayılan olarak sağlamaz (örneğin, Ubuntu sağlamaz). Cron'u kontrol etmenin en hızlı yolu, bu komutla sistem günlüğünü taramaktır:

cat /var/log/syslog | grep -i cron

-i seçeneği, sorgumuzu büyük/küçük harf duyarlı yapmaz. cron'un bir yerde kendi günlük dosyasına sahip olması mümkündür.

/var/log/

, bu komut yararlı sonuçlar üretemezse oraya bakın.

Belirli bir cron işinin çıktısını kaydetmeniz gerekiyorsa, onu bir dosyaya yönlendirebilirsiniz. Çalıştırmak istediğiniz komuttan sonra, crontab'ınızın son sütununda dosyanın yolunu ve adını girin:

30 * * * * /usr/bin/yourcommand > /home/username/logfile.txt

Tek bir > sembolü kullanmak, komut her çalıştırıldığında dosyanın üzerine yazacaktır. Bunu önlemek için bunun yerine >> kullanın -- çıktıyı mevcut dosyaya ekler.

Ya Cron Çalışmıyorsa?

Bazı görevler eklemiş, sistem günlüklerini kontrol etmiş ve olması gerektiği gibi yürütülmediklerini görmüş olabilirsiniz. Sorunu çözmeye çalışırken göz önünde bulundurmanız ve dikkatli olmanız gereken bazı şeyler burada.

cron hizmeti çalışıyor mu?

Bildiğiniz gibi, cron arka plan programı arka planda çalışıyor olmalıdır. Durumun gerçekten böyle olduğundan emin olun. Hizmet ya crond ya da sadece cron olarak adlandırılır.

systemd kullanan dağıtımlar için:

systemctl status cron

Upstart kullanan dağıtımlar için:

service cron status

Dağıtımınız 'eski' System V başlatma yaklaşımını kullanıyorsa, tüm hizmetleri aşağıdakilerle listeleyin:

tüm zamanların en iyi 2d platformcuları
initctl list

ve cron'un listelenip listelenmediğine bakın.

Bir crontab dosyasına sahip olmanıza bile izin var mı?

kontrol edin

/etc

adlı dosyalar için klasör

cron.allow

ve

cron.deny

. Ubuntu'da hiçbiri mevcut olmamalıdır, bu da tüm kullanıcıların cron işlerini yönetmesine izin verildiği anlamına gelir. Ancak, eğer varsa

iş windows 10 için skype'ı kaldırın
cron.allow

dosya, kullanıcı adınızı içermelidir. Tersine, eğer

cron.deny

dosya mevcutsa, kullanıcı adınız içinde olmamalıdır. Terketmek

cron.deny

boş dosya, yalnızca kök ve kullanıcıların listelendiği anlamına gelir.

cron.allow

crontab dosyalarına sahip olabilir.

Değişkenleriniz doğru ayarlanmış mı?

Crontab, SHELL değişkeninizi otomatik olarak

/bin/sh

. Ancak, eğer seçtiğiniz kabuk balıktır veya bash, SHELL değişkenini değiştirmelisiniz

. Benzer şekilde, PATH değişkeni varsayılan olarak yalnızca birkaç dizin içerir. Burası crontab'ın Linux komutlarını aradığı yerdir. Cron işiniz çalışmıyorsa, bunun nedeni crontab'ın kullandığınız komutu 'görmemesi' olabilir. Bunu önlemek için, PATH değişkenine iki nokta üst üste ile ayırarak komutları içeren dizinler ekleyin:

YOL=/opt/myapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Bunu crontab'ınızda düzenlemek istemiyorsanız, bu değişkenleri cron işi olarak çalıştırmak istediğiniz komut dosyasında tanımlayabilirsiniz.

Crontab biçimlendirmeniz yerinde mi?

Crontab sözdizimi tam olarak düzgün seyir değildir. Daha önce bahsedilen çevrimiçi araçlarla doğrulasanız bile, küçük bir hata yine de cron'un işlerinizi yürütmesini engelleyebilir. Dikkatli olun:

  • crontab dosyasının sonuna boş bir satır ekleyin
  • komutunuz içeriyorsa, % işaretinden ters eğik çizgi ile çıkın
  • # ile başlayan ayrı satırlar halinde yorumlar yazın. Ortam değişkenleriyle aynı satıra veya cron işi komutlarının yanına yorum yazmayın.

Terminali Gerçekten Kullanmanız Gerekiyor mu?

Kesinlikle hayır. KDE kullanıcıları, şuradan erişilebilen KCron ile cron işlerini planlayabilirler. Sistem Ayarları > Görev Zamanlayıcı modül. Sadece birkaç fare tıklamasıyla her şeyi seçmenize ve ince ayar yapmanıza izin veren basit bir arayüz ile KCron'u kullanmak bir zevktir.

GNOME'u tercih ediyorsanız, o zaman GNOME Programı senin için. Arayüz beklendiği gibi biraz farklı olsa da yaklaşım benzer. Hassas değişiklikler için gelişmiş bir mod sunar ve görevleri doğrudan yönetebileceğiniz bir panel uygulaması ile birlikte gelir.

Gibi diğer çözümlerin farkında olmalısınız. Crontab-UI ve Minikron . Birden fazla makineyi ve cron işini yöneten kullanıcılar için daha uygundurlar ve en havalı özelliklerinden biri web tabanlı arayüzdür.

Herhangi Bir Cron Alternatifi Var mı?

cron hemen hemen Linux için standart görev zamanlayıcı olsa da, kesinlikle tek değil. NS komutada özel yapılandırma dosyaları olmadan doğrudan komut satırından programlanabilen hızlı, tek seferlik işler için mükemmeldir. Daha fazlasına ihtiyacınız varsa, var GNUbatch bağımlılık kavramını tanıtır. GNUbatch ile her iş için belirli koşullar belirleyebilir veya zamanlanmış bir görevi öncekine bağlı hale getirebilirsiniz. Benzer bir şey ile elde edilebilir sistem zamanlayıcıları . Yapılandırmak için cron'dan daha az pratik olsa da, systemd zamanlayıcıları, bilgisayar kapalıyken bir görevin zamanlamasını kaçırıp kaçırmadığını hatırlayabilir ve bir sonraki açılışında çalıştırabilir.

Bu, cron'un tek başına yapamayacağı bir şeydir. Bu nedenle, sürekli çalışan sunucular ve bilgisayarlar için uygundur, ancak bilgisayar kapalıyken programlanmış bir işi yürütmez. burası anakron devreye giriyor. Teknik olarak bir 'alternatif' veya cron'un yerine geçmez. Bunun yerine, anacron cron'u tamamlar ve Ubuntu ve Ubuntu tabanlı ürünler de dahil olmak üzere birçok Linux dağıtımında olduğu gibi onunla birlikte kullanılmalıdır. Anacron, bir görevin en son ne zaman yürütüldüğünü kaydeder ve sistem kapatıldığında kaçırılan herhangi bir örnek olup olmadığını kontrol eder. Bilgisayarı yeniden açtığınızda bunları çalıştıracaktır, ancak her görev günde yalnızca bir kez gerçekleştirilebilir.

fcron gibi bazı cron sürümleri, varsayılan olarak anacron'un özelliklerini sunar. Gelişmiş kullanıcılar bakmak isteyebilir hcron veya Süper Cron temel cron işlevlerine birçok iyileştirme getiren, ancak aynı zamanda yönetilmesi biraz zor olan .

Senden ne haber? Dijital görevlerinizi nasıl düzenlersiniz? Linux'ta hangi görevleri planlıyorsunuz? Yorumlarda cron kullanımıyla ilgili hikayelerinizi ve ipuçlarını paylaşın.

Resim Kredisi: zamanlama panosu Shutterstock aracılığıyla Gonzalo Aragon tarafından

Paylaş Paylaş Cıvıldamak E-posta YouTube'dan Daha İyi 12 Video Sitesi

İşte YouTube'a bazı alternatif video siteleri. Her biri farklı bir alanı işgal eder, ancak yer imlerinize eklemeye değer.

Sonrakini Oku
İlgili konular
  • Linux
  • Linux
Yazar hakkında Ivana Isadora Devcic(24 Makale Yayınlandı)

Ivana Isadora, serbest yazar ve çevirmen, Linux aşığı ve KDE hayranıdır. Ücretsiz ve açık kaynaklı yazılımları destekliyor ve tanıtıyor ve her zaman yeni, yenilikçi uygulamalar arıyor. Nasıl iletişime geçeceğinizi öğrenin Burada .

Ivana Isadora Devcic'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın