Android

Crontab ile cron işlerini zamanlama

Терминал Linux #7.1 - crontab: запуск задач по расписанию

Терминал Linux #7.1 - crontab: запуск задач по расписанию

İçindekiler:

Anonim

Cron, görevleri belirli aralıklarla yürüten bir planlama arka plan programıdır. Bu görevlere cron işleri denir ve çoğunlukla sistem bakımını veya yönetimini otomatikleştirmek için kullanılır.

Örneğin, veritabanlarını veya verileri yedekleme, sistemi en son güvenlik düzeltme ekleriyle güncelleştirme, disk alanı kullanımını denetleme, e-posta gönderme vb. Gibi tekrarlanan görevleri otomatikleştirmek için bir cron işi ayarlayabilirsiniz. Drupal veya Magento gibi bazı uygulamalar, belirli görevleri yerine getirmek için cron işleri gerektirir.

Cron işleri bir dakika, saat, ayın günü, ay, haftanın günü veya bunların herhangi bir kombinasyonu ile çalışacak şekilde programlanabilir.

Crontab Dosyası Nedir?

Crontab (cron tablosu), cron işlerinin zamanlamasını belirten bir metin dosyasıdır. İki tür crontab dosyası vardır. Sistem genelindeki crontab dosyaları ve bireysel kullanıcı crontab dosyaları.

Kullanıcılar crontab dosyaları kullanıcının adına göre depolanır ve konumları işletim sistemlerine göre değişir. CentOS gibi Red Hat tabanlı sistemde crontab dosyaları /var/spool/cron dizininde, Debian ve Ubuntu dosyaları /var/spool/cron/crontabs dizininde depolanır.

Kullanıcı crontab dosyalarını manuel olarak düzenleyebilmenize rağmen, crontab komutunun kullanılması önerilir.

/etc/crontab ve /etc/cron.d dizinindeki dosyalar, yalnızca sistem yöneticileri tarafından düzenlenebilen sistem çapında crontab dosyalarıdır.

Çoğu Linux dağıtımında, komut dosyalarını /etc/cron.{hourly, daily, weekly, monthly} dizinlerinin içine de koyabilirsiniz ve komut dosyaları her hour/day/week/month yürütülür.

Crontab Sözdizimi ve İşleçleri

Kullanıcı crontab dosyasındaki her satır, bir boşlukla ve ardından çalıştırılacak komutla ayrılmış altı alan içerir.

* * * * * command(s) - - - - - | | | | | | | | | ----- Day of week (0 - 7) (Sunday=0 or 7) | | | ------- Month (1 - 12) | | --------- Day of month (1 - 31) | ----------- Hour (0 - 23) ------------- Minute (0 - 59)

İlk beş alan, virgülle ayrılmış bir veya daha fazla değer veya tire ile ayrılmış bir değer aralığı içerebilir.

  • * - Yıldız operatörü herhangi bir değer anlamına gelir veya her zaman demektir. Saat alanında yıldız sembolü varsa, bu görev her saat başı gerçekleştirilecek demektir. , - Virgül işleci, tekrarlama için bir değer listesi belirlemenizi sağlar. Örneğin, Saat alanında 1, 3, 5 varsa, görev 01:00, 1, 3, 5 ve 1, 3, 5 arasında çalışır. - - Kısa çizgi operatörü bir dizi değer belirlemenizi sağlar. Haftanın Günü alanında 1-5 varsa, görev hafta içi her gün (Pazartesi'den Cuma'ya) çalışır. / - Eğik çizgi işleci, aralarındaki belirli bir aralıkta yinelenecek değerleri belirlemenizi sağlar. Örneğin, Saat alanında */4 varsa, bu eylemin dört saatte bir gerçekleştirileceği anlamına gelir. 0, 4, 8, 12, 16, 20 belirtmekle 0, 4, 8, 12, 16, 20 . Eğik çizgi 1, 11, 21 önceki yıldız işareti yerine, bir dizi değer de kullanabilirsiniz; 1-30/10 , 1, 11, 21 aynı anlamına gelir.

Sistem Çapında Crontab Dosyaları

Sistem genelindeki crontab dosyalarının sözdizimi, kullanıcı crontab'larından biraz farklıdır. Hangi kullanıcının cron işini çalıştıracağını belirten ek bir zorunlu kullanıcı alanı içerir.

* * * * * command(s) * * * * * command(s)

Önceden Tanımlı Makrolar

Ortak aralıkları belirtmek için kullanılan birkaç özel Cron zamanlama makrosu vardır. Bu kısayolları beş sütunlu tarih belirtimi yerine kullanabilirsiniz.

  • @yearly (veya @annually ) - Belirtilen görevi yılda bir kez 1 Ocak gece yarısı (12:00) gerçekleştirin. 0 0 1 1 * eşdeğerdir. @monthly - Belirtilen görevi ayda bir kez, ayın ilk günü gece yarısında çalıştırın. 0 0 1 * * eşdeğerdir. @weekly - Belirtilen görevi Pazar günü gece yarısı haftada bir kez çalıştırın. 0 0 * * 0 eşdeğerdir. @daily - Belirtilen görevi gece yarısı günde bir kez çalıştırın. 0 0 * * * eşdeğerdir. @hourly - Belirtilen görevi saatin başında saatte bir kez çalıştırın. 0 * * * * eşdeğerdir. @reboot - Belirtilen görevi sistem başlangıcında (önyükleme zamanı) çalıştırın.

Linux Crontab Komutu

Crontab komutu, düzenleme için bir crontab dosyası kurmanıza veya açmanıza olanak tanır.

Aşağıdaki seçenekleri kullanarak cron işlerini görüntülemek, eklemek, kaldırmak veya değiştirmek için crontab komutunu kullanabilirsiniz:

  • crontab -e - crontab dosyasını düzenler veya henüz yoksa oluşturun. crontab -l - crontab dosya içeriğini görüntüler. crontab -r - Geçerli crontab dosyanızı kaldırır. crontab -i - Kaldırmadan önce mevcut crontab dosyanızı bir istemle kaldırın. crontab -u - Diğer kullanım crontab dosyasını düzenleyin. Sistem yöneticisi ayrıcalıkları gerektirir.

Crontab komutu, VISUAL veya EDITOR ortam değişkenleri tarafından belirtilen düzenleyiciyi kullanarak crontab dosyasını açar.

Crontab Değişkenleri

Cron arka plan programı otomatik olarak birkaç ortam değişkeni ayarlar.

  • Varsayılan yol PATH=/usr/bin:/bin olarak ayarlanmıştır. Aradığınız komut, cron tarafından belirtilen yolda varsa, komutun mutlak yolunu kullanabilir veya cron $PATH değişkenini değiştirebilirsiniz. Örtük olarak ekleyemezsiniz :$PATH normal bir komut dosyasında yaptığınız gibi Varsayılan kabuk /bin/sh olarak ayarlanmıştır. SHELL değişkenini değiştirerek farklı bir kabuk ayarlayabilirsiniz.Cron komutu kullanıcının ana dizininden çağırır. HOME değişkeni crontab'daki ayarlar tarafından geçersiz kılınabilir. E-posta bildirimi crontab sahibine gönderilir. Varsayılan davranışın üzerine yazmak için, MAILTO ortam değişkenini, e-posta bildirimlerini almak istediğiniz tüm e-posta adreslerinin bir listesiyle (virgülle ayrılmış) kullanabilirsiniz. MAILTO tanımlanmış ancak boşsa ( MAILTO="" ) posta gönderilmez.

Crontab Kısıtlamaları

Sistem yöneticileri /etc/cron.deny ve /etc/cron.allow dosyalarını kullanarak crontab komutuna hangi kullanıcıların erişebileceğini /etc/cron.allow . Dosyalar, kullanıcı adı listesinden oluşur, her satırda bir kullanıcı adı bulunur.

Varsayılan olarak yalnızca /etc/cron.deny dosyası vardır ve boştur, yani tüm kullanıcılar crontab komutunu kullanabilir. Belirli bir kullanıcıya crontab komutlarına erişimi reddetmek istiyorsanız, kullanıcı adını bu dosyaya ekleyin.

/etc/cron.allow dosyası varsa, yalnızca bu dosyada listelenen kullanıcılar crontab komutunu kullanabilir.

Her iki dosya da mevcut değilse, yalnızca yönetici ayrıcalıklarına sahip kullanıcılar crontab komutunu kullanabilir.

Cron İşleri Örnekleri

Aşağıda, bir görevin farklı zaman aralıklarında çalışacak şekilde nasıl zamanlanacağını gösteren bazı cron işi örnekleri verilmiştir.

  • Pazartesiden cumaya her gün saat 15: 00'de bir komut çalıştırın:

    0 15 * * 1-5 command

    Her 5 dakikada bir komut dosyası çalıştırın ve standart çıktıyı dev null yeniden yönlendirin, belirtilen standart e-posta adresine yalnızca standart hata gönderilir:

    [email protected] */5 * * * * /path/to/script.sh > /dev/null

    Her Pazartesi 15.00'de iki komut çalıştırın (komutlar arasında && operatörünü kullanın):

    0 15 * * Mon command1 && command2

    Her 2 dakikada bir PHP betiği çalıştırın ve çıktıyı bir dosyaya yazın:

    */2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log

    Her gün, her saat, saat, sabah 8'den akşam 4'e kadar bir komut dosyası çalıştırın:

    00 08-16 * * * /path/to/script.sh

    Her ayın ilk Pazartesi günü, sabah 7'de bir komut dosyası çalıştırın

    0 7 1-7 * 1 /path/to/script.sh

    Bir senaryoyu her ayın 1. ve 15. günlerinde, saat 9: 15'te çalıştırın:

    15 9 1, 15 * * /path/to/script.sh

    Özel HOME , PATH , SHELL ve MAILTO değişkenlerini ayarlayın ve her dakika bir komut çalıştırın.

    HOME=/opt PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SHELL=/usr/bin/zsh [email protected] */1 * * * * command

Sonuç

Cron işleri oluşturmayı ve görevleri belirli bir tarih ve saatte nasıl zamanlayacağınızı öğrendiniz.

Herhangi bir sorunuz varsa yorum bırakmaktan çekinmeyin.

cron crontab terminali