close

Cron (Unix)

Navigasyona git Aramaya git

Unix işletim sisteminde cron , süreçleri veya komut dosyalarını düzenli aralıklarla (örneğin, her dakika, gün, hafta veya ay) çalıştıran düzenli bir arka plan işlem yöneticisidir ( daemon ). Çalıştırılması gereken işlemler ve çalıştırmaları gereken zaman . Cron adı , "zaman" anlamına gelen Yunanca chronos'tan (χρόνος) gelir.crontab

Cron , Windows Zamanlanmış Görevlerinin karşılığı olarak tanımlanabilir .

Genel Bakış

Cron, belirli bir zamanda periyodik olarak çalışacak bir kabuk komutunu belirten bir yapılandırma dosyası olan crond tarafından tetiklenir . Crontab dosyaları , cron arka plan programı için iş listelerinin ve diğer talimatların kaldığı yerde saklanır. crontab dosyanızı oluşturmasına izin verilen kullanıcılar , cron.allow dosyasında belirtilir . Benzer şekilde, izin verilmeyenler cron.deny'de listelenir. Bu son iki dosya, Unix'in sürümüne bağlı olarak /etc/cron.d/ veya /etc/ dizininde bulunur .

Bir crontab dosyasının her satırı bir işi temsil eder ve bir CRON ifadesinden ve ardından yürütülecek bir kabuk komutundan oluşur . Paul Vixie tarafından yazılan ve birçok Linux dağıtımında bulunan popüler BSD 4. baskısında olduğu gibi bazı cron uygulamaları, formata, belirtilen işi kimin yürüteceği (varlığına bağlı olarak) gibi altıncı bir alan olarak bir kullanıcı adı belirtimi ekler. /etc/passwd içindeki bir kullanıcının ve yetkili izinlerin). Buna yalnızca crontab sisteminde (/etc/crontab ve /etc/cron.d/*) izin verilir, her kullanıcının bir konfigürasyona atandığı diğerlerinde izin verilmez.

"Haftanın günü" (alan 5) için hem 0 hem de 7 Pazar olarak kabul edilir, ancak AIX gibi bazı Unix sürümleri man sayfasına göre "7"yi geçerli olarak kabul etmez . Saat/tarih alanları belirtildiğinde iş normal olarak çalıştırıldığında, bunların tümü geçerli tarih ve saatle eşleşir, bu bir istisnadır.

Hem "ayın günü" hem de "haftanın günü" kısıtlanmışsa (" * " değil ) , o zaman "ayın günü" (alan 3) veya " haftanın günü" (alan 5) geçerli günle eşleşmelidir.

Crontab dosya biçimi

Örnek crontab dosyası:

KABUK=/bin/bash
YOL=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=kök
GİRİŞ=/

# çalışma parçaları
01 * * * * root nice -n 19 run-parts /etc/cron.hourly
50 0 * * * root nice -n 19 run-parts /etc/cron.daily
22 4 * * 0 root nice -n 19 run-parts /etc/cron.weekly
42 4 1 * * root nice -n 19 run-parts /etc/cron.monthly

Görevleri eklemek, kaldırmak veya değiştirmek için crontab'ı düzenlemeniz gerekir. Bu, EDITOR ortam değişkeninde tanımlanan düzenleyiciyi açacak ve oturum açan kullanıcıya karşılık gelen crontab dosyasını yükleyecek olan crontab -e komutuyla yapılır.

Crontab her çalıştırıldığında, etkinleştirilmişse MAILTO ortam değişkeninde görüntülenen ve gerçekleştirilen görevi belirten kullanıcıya bir mesaj gönderilir.


Apache hata günlüğü daha sonra gece yarısından bir dakika sonra kesilir (ayın her günü, haftanın her günü 00:01).

1 0 * * * echo -n "" > /www/Apache/logs/error_log

Ardından komut dosyası yürütülür: /home/user/test.pl her 5 dakikada bir.

*/5 * * * * /home/user/test.pl
.-------- dakika (0-59)
| .----------- saat (0-23)
| | .-------- ayın günü (1-31)
| | | .------ ay (1-12) veya jan,feb,mar,nisan,may,jun,jul... (ingilizce aylar)
| | | | .--- haftanın günü (0-6) (Pazar=0 veya 7) veya sun,mon,tue,wed,thu,fri,sat (günler İngilizce)
| | | | |
* * * * * çalıştırma komutu

Not: ortam değişkenleri desteklenmez


Sözdizimi

Cron yapılandırma formatı çok basittir.

  • "#" karma sembolü bir yorumdur, bu karakterden sonraki hiçbir şey cron tarafından yürütülmez .
  • Yürütme süresi aşağıdaki tabloya göre belirlenir:
  1. Dakika: (0-59)
  2. Saat: (0-23)
  3. Günler: (1-31)
  4. Ay: (1-12)
  5. Haftanın günü: (0-6), burada 1=Pazartesi, 2=Salı,... 6=Cumartesi ve 0=Pazar (bazen 7=Pazar)
################################################# #########
#dakika (0-59), #
#| saat (0-23), #
#| | ayın günü (1-31), #
#| | | ay (1-12), #
#| | | | haftanın günü (0-6, 0=Pazar) #
#| | | | | komutlar #
################################################# #########
15 02 * * *
Bir değişkenin tüm olası değerlerini belirtmek için yıldız işareti (*) kullanılır.

Örnekler

Örneğin:

30 10 * * 1 /usr/bin/who >> /var/log/usuarios.txt

Her Pazartesi saat 10: 30'da who komutunu çalıştırın ve çıktıyı users.txt dosyasına kaydedin.

Her değişkende iki veya daha fazla değer belirtmek için yukarıdaki örnek izlenerek virgülle ayrılmalıdır:

0,30 * * * 1 /usr/bin/who >> /var/log/usuarios.txt

Her Pazartesi yarım saatte bir who komutunu çalıştırın ve çıktıyı users.txt dosyasına kaydedin.

Her 15 dakikada bir çalışmasını istiyorsak,

0,15,30,45 * * * * /usr/bin/who >> /var/log/usuarios.txt

herhangi biri

*/15 * * * * /usr/bin/who >> /var/log/usuarios.txt

Bu örnekte, cron'a birden fazla komutun nasıl iletileceğini ve tesadüfen bir indirme işleminin nasıl planlanabileceğini göreceğiz:

30 21 * * * cd /media/sda7/dexter/distributions/isos;wget http://example.com/archivo_a_descargar.loquesea

Bu diğeri, bilgisayarın kapanmasını programlamak içindir. Bu durumda her Cumartesi saat 21:30'da.

30 21 * * 6 /sbin/shutdown -h now

Belirli bir kullanıcının crontab'ını düzenle

crontab [ -u kullanıcı ] dosyası

crontab [ -u kullanıcı ] { -l | -r | -e }

-u seçeneği, yönetmek istediğimiz kullanıcı crontab'ını belirtmek için kullanılır. Bu seçenekle sadece root crontab komutunu kullanabilecektir.

-e seçeneği düzenlemek için kullanılır

Önceden tanımlanmış programların tanımı

CRON ifadesinin yerine kullanılabilecek önceden tanımlanmış birkaç değer vardır.

giriş Tanım eşittir
@yearly Yılda bir kez çalışır 0 0 1 1 *
@annually (aynı @yearly) 0 0 1 1 *
@monthly Ayda bir çalışır 0 0 1 * *
@weekly Haftada bir çalışır 0 0 * * 0
@daily Günde bir kez çalışır 0 0 * * *
@midnight (aynı @daily) 0 0 * * *
@hourly Her saatte bir çalışır 0 * * * *

Ayrıca @reboot, cron arka plan programı her başlatıldığında bir işin bir kez çalışmasına izin veren ve genellikle sunucu başlatma ile çakışacak olan da mevcuttur. Bu, belirli bir kullanıcı altında bir sunucu veya arka plan programı başlatmak gerektiğinde veya kullanıcının rc.d/init.d dosyası için izinlere sahip olmadığı durumlarda faydalı olabilir .

Saat dilimlerini manipüle etme

Pek çok cron uygulaması, arka plan programının çalıştığında ayarladıkları sayesinde sistem saat dilimi ayarındaki crontab girişlerini basitçe yorumlar. Çok kullanıcılı büyük ekiplerin birden çok saat diliminde kullanıcıları varsa, özellikle de varsayılan saat dilimi sistemi potansiyel olarak kafa karıştırıcı DST içeriyorsa bu, çakışmaların kaynağı olabilir . Bu nedenle, bir cron uygulaması, kullanıcı crontab'ında herhangi bir özel durum "TZ=<timezone>" ortam değişkeni ayar satırlarına sahip olabilir ve ilgili crontab girişlerini saat diliminden sonra yorumlayabilir. [ 1 ]

Tarih

Erken sürümler

Brian Kernighan tarafından yazılan Unix sürüm 7'deki Cron, işletim sistemi çok kullanıcılı moda geçtiğinde çağrılan bir sistem hizmetiydi (daha sonra arka plan programı olarak adlandırıldı). Bu algoritma basitti: /etc/inittab

  1. Okumak/usr/etc/crontab
  2. Geçerli tarih ve saatte herhangi bir komutun çalışıp çalışmadığını ve root olarak çalışıp çalışmadığını belirleyin .
  3. Bir dakikalığına askıya al
  4. 1. adımı tekrarlayın.

Bu cron sürümü basit ve sağlamdı, ancak yapacak herhangi bir iş bulsa da bulmasa da kaynakları tüketiyordu; Bu açıklamayı duyunca , Purdue Üniversitesi'nde profesör olan Douglas Comer , "Ah, bir kısa hafıza algoritması" dedi. 1970'lerin sonlarında Purdue Üniversitesi'nde, yüksek sistem yükü konumunda bulunan bir VAX devre mülkündeki tüm 100 kullanıcıya cron hizmetlerini genişletmek için yapılan bir deneyde.

Çoklu kullanıcı özelliği

System V sürümüyle birlikte bir sonraki cron sürümü, cron'un yeteneklerini yalnızca kök (veya süper kullanıcı) değil, bir Unix sistemindeki tüm kullanıcılara genişletmek için oluşturuldu. Güçlü işlemcilere ve az sayıda kullanıcıya sahip çoğu Unix ve Unix benzeri sistemlerde bu durum günümüzde önemsiz görünse de, şu anda yaklaşık 100 kullanıcı hesabına sahip 1 MIPS sisteminde yeni bir yaklaşım gerektiriyor.

Modern versiyonlar

GNU ve Linux projesinin avantajı ile yeni bir cron ortaya çıktı. Bununla en alakalı olanı, orijinal olarak 1987'de Paul Vixie tarafından kodlanan Vixie cron'dur. Vixie cron sürüm 3 , 1993'ten sonra piyasaya sürüldü. Sürüm 4.1, ISC (İnternet Sistem Konsorsiyumu) ​​Cron olarak yeniden adlandırıldı ve Ocak 2004'te yayınlandı. Sürüm 3, küçük bir hata ile düzeltmeler, çoğu GNU/Linux ve BSD dağıtımı tarafından kullanılır.

2007'de RedHat, cron-vixie 4.1'i cronie projesine çatalladı ve 2009'da anacron 2.3'ü dahil etti.

Diğer popüler uygulamalar arasında anacron ve fcron bulunur . Ancak, anacron bağımsız bir cron programı değildir; çalıştırmak için onu çağırmak için başka bir cron programına güvenir.

Referanslar

  1. ^ "Güneş.com" . 5 Ağustos 2009 tarihinde kaynağından arşivlendi . Erişim tarihi: 28 Nisan 2010 . 

Dış bağlantılar