Linux'ta Crontab – Gerçek Zamanlı Örnekler ve Araçlarla

Yayınlanan: 2015-07-26

Crontab'ı, komutlarını ve Crontab ile ilişkili çeşitli işlemleri inceleyelim.

Cron yardımcı programını kullanarak görevleri nasıl programlayacağımızı öğreneceğiz ve son olarak, cron komutlarını biçimlendirme ve test etmede bize yardımcı olan bazı çevrimiçi araçları da tartışacağız.

Menşei

Crontab, " cron tablosu " anlamına gelir. Cron kelimesi, Yunanca zaman anlamına gelen Chronos kelimesinden alınmıştır. Crontab, bazı görevleri ve işleri zamanlanan zamana göre otomatik olarak gerçekleştirecek bir sistem arka plan programı işlemidir.

Kullanım durumları

Crontab, otomatik yedeklemeyi işleme, günlük dosyalarını döndürme, uzak makineler arasında dosyaları senkronize etme ve geçici klasörleri temizleme vb. gibi çeşitli işlemleri gerçekleştirmek için kullanışlıdır. Crontab her türlü iş için kullanılabilir, ancak özellikle bunlarla uğraşmaya başladığımızda kullanışlı hale gelir. sistem yönetimi iş türü.

Bir yönetici, cron'u kullanarak bir işi belirli bir saat ve günde çalışacak şekilde planlayabilir.

Şimdi bunu nasıl ayarlayabileceğimize bir bakalım.

Crontab Sözdizimi

Bir komut listesi yürütmek için cron yardımcı programı yapılandırma dosyalarını okur. Crontab yapılandırma tablolarındaki satırları yorumlamak için bir Crontab sözdizimi izler. Crontab'ın altı alanı vardır ve ilk beş(1-5) alan, yürütmenin tarihini ve saatini tanımlar. Son alan, yani 6. alan, yürütülecek bir kullanıcı adı ve/veya görev/iş/komut/komut dosyası olabilir.

* * * * * KULLANICI_ADI KOMUT/YÜRÜTMEK İÇİN SCRIPT

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Haftanın Günü (0 – 6) (0 Pazar veya adları kullanın)
│ │ │ | ____________ Ay (1 – 12),* her ay anlamına gelir
│ │ | ______________ Ayın Günü (1 – 31),* her gün anlamına gelir
│ | ________________ Saat (0 – 23),* her saat anlamına gelir
| _____ Dakika (0 – 59), * her dakika anlamına gelir

Notlar :

  • Yıldız işareti (*), bir alan için tüm olası değerleri eşleştirmek için kullanılır. Örneğin, saat alanında kullanılan bir yıldız işareti her saate veya ay alanındaki bir yıldız işareti her aya eşdeğer olacaktır.
  • kullanıcı adı isteğe bağlıdır (yalnızca sistem crontab dosyasıysa kullanılabilir)

Örnekler:

Yukarıdaki sözdizimini bazı örneklerle anlayalım

1. Her gün sabah 5'te yürütülecek bir cron programlayın

 0 5 * * * /scripts/job.sh

2. Günde iki kez sabah 6 ve akşam 6'da yürütülecek bir cron programlayın

 0 6,18 * * * /scripts/job.sh

3. Her dakika yürütülecek bir cron programlayın

 * * * * * /scripts/job.sh

4. Her Pazartesi saat 19:00'da yürütülecek bir cron programlayın.

 0 19 * * mon /scripts/job.sh

5. Her 15 dakikada bir yürütülecek bir cron programlayın.

 */10 * * * * /scripts/job.sh

6. Seçilen aylarda yürütülecek bir cron programlayın

 * * * feb,jun,oct * /script/job.sh

7. /home/script/backup.sh kabuk betiğini 4 Mart'ta 07:25'te çalıştırın

 25 7 4 3 * /home/script/backup.sh

8. Her 30 Saniyede bir yürütülecek bir cron programlayın

Crontab'da saniyeler üzerinde kontrolümüz olmadığı için aşağıdaki iki aşamalı işlem ile bunu başarabiliriz.

  • Önce her dakika çalışan bir görev planlayalım.
 * * * * * /home/scripts/script.sh
  • Şimdi yürütmeyi 30 saniye duraklatmak için sleep komutunu kullanalım.
 * * * * * sleep 30; /home/scripts/script.sh

Yukarıdaki görev, yürütmeyi 30 saniyeliğine durduracak ve yeniden devam edecektir.

Cron yapılandırma dosyalarının türü

İki tür Cron yapılandırma dosyası vardır:

UNIX/Linux Sistemi Crontab

Bu, genellikle sistem hizmetleri ve kritik işler için kullanıldığından kök ayrıcalığı gerektirir. Altıncı alan (yukarıdaki sözdizimi açıklamasında), komutun çalıştırılacağı kullanıcının adıdır. Sistem crontab'ına komutları herhangi bir kullanıcı olarak çalıştırma yeteneği verir.

kullanıcı Crontab

Bir kullanıcı, crontab komutunu kullanarak kendi cron işlerini de kurabilir. Burada ayrıca altıncı alan (yukarıdaki sözdizimi açıklamasında) çalıştırılacak komuttur ve tüm komutlar crontab'ı oluşturan kullanıcı olarak çalışır. Her kullanıcının kendi crontab dosyası olabilir ve bunlar /var/spool/cron/ crontabs içindeki dosyalar olsa da, doğrudan düzenlenmeleri amaçlanmamıştır. Kendi cron işlerimizi düzenlemek veya kurmak için crontab komutunu kullanmamız gerekiyor.

O nasıl çalışır?

Cron hizmeti (arka plan programı) arka planda çalışır ve /etc/crontab dosyasını ve /etc/cron.*/ dizinlerini sürekli olarak (her dakika) kontrol eder. Ayrıca /var/spool/cron/ dizinini de kontrol eder. Dakika, saat ve ay alanları geçerli saatle eşleştiğinde ve iki günlük alanlardan en az biri (ayın günü veya haftanın günü) geçerli günle eşleştiğinde komutlar cron tarafından yürütülür.

Temel Komutlar

Mevcut Cron İşlerini Listeleme

Aşağıdaki komutu kullanarak crontab yapılandırma dosyasını açmadan tüm Cron işlerini listeleyebiliriz.

 crontab -l

Mevcut bir iş yoksa çıktıyı şu şekilde döndürür:

 [geekflare@localhost ~]# crontab -l no crontab for geekflare [geekflare@localhost ~]#

Kullanıcı bazı işleri zaten eklediyse, aşağıdaki gibi görüntülenecektir.

 [geekflare@localhost ~]# crontab -l # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 am every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # mh dom mon dow command 0 */1 * * * /home/account/scripts/updateAccountStatuses.sh 0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh [geekflare@localhost ~]#

Cron tablosu kullanıcıya özeldir, yani cron tablosu listesini görmek için belirli bir kullanıcıyla oturum açmanız gerekir.

Belirli bir kullanıcı için Cron'u listele

Başka bir kullanıcının zamanlanmış işlerini listelemek için seçeneği -u ( Kullanıcı ) ve -l ( Liste ) olarak kullanın.

crontab -u another_username -l

Örnek : crontab -u geekflare -l

Crontab Girişlerini Ekle/Değiştir

Crontab girişini düzenlemek için aşağıda gösterildiği gibi -e seçeneğini kullanabiliriz.

crontab -e

Yukarıdaki komut, işin ayrıntılarını belirttiğiniz ve dosyayı kaydettiğiniz vi editörlerini açacaktır. Kaydedildikten sonra, cron'un yapılandırılıp yapılandırılmadığını crontab -l ile doğrulayabilirsiniz.

Belirli Kullanıcı İçin Crontab Girişlerini Ekleme/Değiştirme

Aşağıdaki komutu kullanarak başka bir kullanıcı için crontab'ı düzenleyebiliriz

 crontab -u another_username -e

Örnek : crontab -u geekflare -e

Crontab Girişini Kaldır

Tüm zamanlanmış işleri crontab'dan onay almadan kaldırmak için Crontab ile <strong>-r</strong> parametresini kullanın

crontab -r

Planlanmış işleri silmeden önce onay istiyorsanız, kullanıcının crontab'ını silmeden önce kullanıcıdan onay isteyen -r ile <strong>-i</strong> seçeneğini kullanın.

 crontab -i -r
 [geekflare@localhost ~]# crontab -i -r crontab: really delete geekflare's crontab?

Crontab Özel Dize

Yukarıda tartıştığımız sözdiziminin dışında, Crontab tarafından sağlanan sekiz özel diziyi de kullanabiliriz. Sadece zamandan tasarruf etmekle kalmayacak, aynı zamanda okunabilirliği de artıracaktır.

Özel Dize Tanım
@reboot Başlattıktan sonra bir kez çalıştırın.
@yearly Yılda bir kez çalıştırın, yani 0 0 1 1 *
@annually @yearly ile aynı
@monthly Ayda bir çalıştırın, yani 0 0 1 * *
@weekly Haftada bir kez çalıştırın, yani 0 0 * * 0
@daily Günde bir kez çalıştırın, yani 0 0 * * *
@midnight @daily ile aynı
@hourly Saatte bir çalıştırın, yani 0 * * * *

Crontab Özel Dize Örnekleri

1. Görevleri yıllık olarak planlamak için Crontab

@yearly /scripts/greeting.sh

Yeni yıl selamı göndermek için yukarıdakini çalıştırabiliriz, Her yılın ilk dakikasında yürütülür.

2. Görevleri aylık olarak yürütülecek şekilde planlamak için Crontab.

@monthly /scripts/cleanup.sh

Her ayın başında bazı temizlik faaliyetlerini gerçekleştirmek için yukarıdakini uygulayabiliriz.

Benzer şekilde, diğer Crontab özel dizelerini haftalık, günlük ve saatlik amaçlar için kullanabiliriz.

Cron Dizini

Sistem yöneticisi, aşağıda gösterildiği gibi önceden tanımlanmış cron dizini altında gelen sistem çapında bir cron çizelgesi kullanabilir.

  • /etc/cron.d
  • /etc/cron.günlük
  • /etc/cron.saatlik
  • /etc/cron.aylık
  • /etc/cron.weekly

Crontab Gerçek Zamanlı Örnekler

Bir sistem yöneticisinin veya BT uzmanlarının genellikle kullandığı gerçek zamanlı örneklerden bazılarını tartışalım.

Boş dosyaları ve dizini silin

45 0 * * * geekflare find /tmp -type f -empty -delete

Yukarıdaki cron ifadesi /tmp dizinindeki boş dosyaları ve dizini bulacak ve onları silecektir. Bu iş günlük olarak 12.45'te çalışacaktır. Bu işi yapabilmek için kullanıcı adını belirtmemiz gerekiyor. Yukarıdaki örnekte, geekflare kullanıcısı cron işi işlemini gerçekleştirmektedir.

Tek bir cron kullanarak birden çok görevi yürütün

* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh

Birden çok görev/iş, noktalı virgül ( ; ) kullanılarak ayrılabilir ve tek bir cron ifadesine atanabilir.

Cron biçimlendirme ve test araçları

Şimdiye kadar bir görevi zamanlamak için crontab komutlarını ve sözdizimini tartıştık. Ama ya sistem yöneticisi değilseniz ve işiniz Cron'u düzenli olarak kurmak değilse, sözdizimini hatırlamak mümkün olmayabilir ve hataya yer açar. Merak etmeyin bu soruna bir çözümümüz var.

Çevrimiçi olarak kullanılabilen birkaç Cron biçimlendirme aracı vardır.

# 1. Cron İş Üreticisi

Cron Job Generator, crontab oluşturmak için betiğin dakikasını, günlerini ve yolunu belirtebileceğiniz çok kullanıcı dostu bir GUI'dir.

Pazartesiden Cumaya kadar her 5 dakikada bir /home/processMonitor.sh gereken gerçek zamanlı bir örnek alalım.

Böylece, çalıştırarak crontab'ıma koyabileceğim aşağıdaki Cron sözdizimini aldım.

crontab –e
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh

# 2. Easycron

Easycron, kullanışlı bir web tabanlı cron iş planlayıcısıdır. Çağrılacak bir URL belirterek bir cron işi oluşturabiliriz, ne zaman yürütüleceğini ayarlayabiliriz. Ayrıca bir cron ifadesi belirleyebilir veya açıklayıcı bir formdan manuel olarak ekleyebiliriz. Daha da önemlisi, küçük bir güvenlik katmanı için isteğe bağlı olarak temel HTTP kimlik doğrulamasını kullanabiliriz.

Sadece bu değil, Easycron ayrıca Standart Cron ifadesi, Cron İş Yürütme Günlükleri, E-posta Bildirimi, Ayrı Arıza Günlükleri vb. gibi başka amaçlara ulaşmak için de kullanılabilir.

# 3. Crontab Oluşturucu

Crontab Generator, crontab oluşturmak için başka bir kullanışlı araçtır ve bu araçla, cron çıktısını dosyaya kaydetmek veya e-postaya göndermek isteyip istemediğinizi de ekleyebilirsiniz.

# 4. Crontab Guru

Crontab Guru, basit bir çevrimiçi cron zamanlama ifadesi düzenleyicisidir. Ek olarak, cronjob'ınızı izlemek için kullanışlı bir yol sağlar. Tek yapmamız gereken sağlanan bir komutu kopyalamak ve crontab tanımının sonuna eklemek. Cron işinin başarısız olması veya başlamaması durumunda bir uyarı e-postası alacaksınız.

Aşağıdaki örnekte, İş her gün, her ay ve her hafta 04: 05'te yürütülecektir.

# 5. CRON Test Cihazı

CRON Tester, cron saat/tarih tanımlarını test etmemizi sağlar. Sorun giderme için mevcut cron sözdiziminin kodunu çözmemiz gereken veya sadece bir test yapmak istediğimiz bir durum olabilir.

Bunun için bu aracı kullanabiliriz. Tek yapmamız gereken cron ifademizi cron tanımı alanına kopyalayıp yapıştırmak, ardından yineleme sayısını seçmek ve çalışacağı çeşitli tarihleri ​​görmek için Test'e tıklamak.

Her iki günde bir 03:04(AM) 'de çalışması gereken 4 3 */2 * * cron ifadelerimizden birini kontrol edelim. Şimdi cron tester ile doğrulayalım.

Çözüm

Umarım yukarıdakiler, Crontab'ı daha iyi anlamanıza ve cron işlerini kurmanıza yardımcı olur. İşleri Cron aracılığıyla zamanlamak, Linux Admin tarafından gerçekleştirilen birçok görevden biridir. Gelişmiş becerileri öğrenmekle ilgileniyorsanız, bu kursa göz atın.