cron
Linux sistemlerinde syslog ve cron logları, sistemin işleyişini anlamak ve anormallikleri tespit etmek için en sık kullanılan veri kaynakları arasındadır. Syslog, sistem bileşenlerinden gelen mesajları merkezi bir noktada toplarken, cron logları zamanlanmış görevlerin başarıyla çalışıp çalışmadığını izlememize yardımcı olur.
Belirli zaman aralıklarında belirlenen komutları veya scriptleri otomatik olarak çalıştıran cron, bir sistem servisidir. Arka planda sürekli çalışarak, yapılandırılmış görevleri belirtilen zaman dilimlerinde gerçekleştirmeye olanak tanır. Böylelikle sistem bakım işlemleri, yedekleme süreçleri, log dosyalarının temizlenmesi, e-posta bildirimleri veya otomatik veri işlemleri gibi görevler insan müdahalesine gerek kalmadan yürütülebilir.
Zamanlanmış görevler, crontab adı verilen bir yapılandırma dosyasında saklanır. Crontab (cron table), kullanıcıların veya sistem yöneticilerinin belirlediği görevleri içeren bir dosya olup, her bir satırda belirli bir zaman diliminde çalışacak komutlar tanımlıdır. Kullanıcı olarak kendi crontab dosyalarımızı oluşturabilir veya düzenleyebilirken, sistem yöneticileri ise tüm sistem genelinde çalışan görevleri /etc/crontab veya /etc/cron.d/ dizinlerinde yönetebilirler.
Crontab dosyası, her bir görevin ne zaman ve hangi komutlarla çalışacağını belirlemek için özel bir zamanlama söz dizimi kullanır. Mesela her gün saat 07:00’de bir yedekleme komutunu çalıştır şeklinde bir görev tanımlamak için 0 7 * * * /home/user/backup.sh gibi bir satır kullanılabilir.
Crontab dosyasında tanımlanan her bir göreve cronjob denir. Cronjob, belirli bir zaman diliminde otomatik olarak çalıştırılmak üzere ayarlanmış bir komut veya betiktir. Bir sistemde aynı anda birçok cronjob çalışabilir ve her biri belirlenen zaman aralıklarında farklı görevleri yerine getirebilir. Mesela bir cronjob her saat başında sistemdeki geçici dosyaları temizleyebilirken, başka bir cronjob her pazartesi sabahı belirli bir dizindeki verileri başka bir sunucuya yedekleyebilir. Bu esneklik sayesinde cronjob lar sistem yönetimini büyük ölçüde otomatik hale getirerek, yönetici yükünü hafifletir ve zamanlanmış süreçlerin kesintisiz yürütülmesini sağlar.

Cron zamanlayıcıları, belirli bir zaman diliminde belirli bir komutu çalıştırmak için kullanılan bir yapılandırma aracıdır. Bu kurallar, zamanlama işlemi için 5 alandan oluşur dakika, saat, ayın günü, ay ve haftanın günü.

* * * * * /path/to/commandDakika (0–59) Bir saatteki dakika dilimlerini temsil eder.
Saat (0–23) Günün saat dilimlerini (24 saatlik formatta) temsil eder.
Ayın Günü (1–31) Ayın hangi gününde çalışacağını belirtir.
Ay (1–12) Hangi ayda çalışacağını belirtir.
Haftanın Günü (0–6) Haftanın hangi günü çalışacağını belirtir (Pazar = 0, Pazartesi = 1, …).
Her bir alanda aşağıdaki semboller kullanılabilir:
Yıldız (*) “Herhangi bir” anlamına gelir. Bu, o alandaki tüm değerlerin geçerli olduğunu belirtir. Örneğin, * dakika kısmında kullanıldığında her dakikada çalışacağı anlamına gelir.
Virgül (,) Birden fazla değer belirtmek için kullanılır. Örneğin, 1,3,5 ifadesi Pazartesi, Çarşamba ve Cuma günlerinde çalışacağı anlamına gelir.
Tire (-) Bir aralık belirtir. Örneğin, 1-5 ifadesi Pazartesi’den Cuma’ya kadar çalışacağı anlamına gelir.
Bölü işareti (/) Belirli aralıklarla çalıştırma için kullanılır. Örneğin, */5 ifadesi her 5 dakikada bir çalıştırmak anlamına gelir.
İleriye doğru () Sadece belirli bir değerle başlayacak bir şey işareti**
Cron için bazı özel zamanlama ifadeleri ve dizinler de vardır.
Saatlik, /etc/cron.hourly
Günlük, /etc/cron.daily
Haftalık, /etc/cron.weekly
Aylık, /etc/cron.monthly
@reboot, sistem her yeniden başlatıldığında.

Manuel olarak yazmak yerine crontab.guru veya crontab.generator gibi araçlar zamanlama parametrelerini daha kolay oluşturmamıza yardımcı olabilir.
crontab -l komutu, mevcut kullanıcının zamanlanmış görevlerini listelemek için kullanılır. Kullanıcının çalıştırılmak üzere belirlediği cronjob’ları görüntülemeye yarar. Eğer belirli bir kullanıcı için görüntülemek istiyorsanız, crontab -u kullanıcı_adı -l komutunu kullanabilirsiniz.

Yeni bir cronjob eklemek veya mevcut görevleri düzenlemek için ise crontab -e komutu kullanılır. Eğer komutu çalıştırdığınızda herhangi bir çıktı almıyorsanız, bu durumda sistemde sizin için tanımlanmış bir cronjob olmayabilir.

/bin/nano en kolay metin düzenleyicidir. Basit bir arayüze sahiptir ve CTRL tuş kombinasyonları ile kullanılır. Çıkmak için CTRL + X, kaydetmek için CTRL + O gibi komutları vardır.
/usr/bin/vim.basic daha gelişmiş bir metin düzenleyicidir. Vim’in temel sürümüdür ve komut modları ile çalışır. Yeni başlayanlar için karmaşık olabilir ama güçlü düzenleme özellikleri sunar.
/usr/bin/vim.tiny daha hafif ve kısıtlı özelliklere sahip bir Vim sürümüdür. Kaynak kullanımı düşük olduğu için minimalist sistemlerde tercih edilir.
Varsayılan olarak nano önerildiği için 1’i seçebiliriz.
sudo crontab -u root -ekomutuyla root kullanıcısı için zamanlanmış görevleri ekleyebilir veya düzenleyebiliriz.

Mesela logları kontrol etmek için her dakika yükleme yapacak bir komut ekleyelim.
Her dakika apt install -y tmux komutunu çalıştırmak için son satıra
* * * * * apt install -y tmux yazalım ve kaydedip çıkalım. (Tmux, bir terminal çoklu pencere yöneticisi olup, kullanıcıların tek bir terminal oturumunda birden fazla bağımsız oturum ve pencere yönetmesine olanak tanır.)

sudo crontab -u root -lkomutuyla root kullanıcısının crontab dosyasındaki mevcut görevlerini listeleyebiliriz.

/var/log/syslog dosyasındaki cron ile ilgili logları görmek için sudo cat /var/log/syslog | grep cron komutunu çalıştırabiliriz.

grep komutu büyük harf duyarlı (case-sensitive) şekilde çalışır. Daha az sonuç için cat /var/log/syslog | grep CRON komutunu kullanarak CRON ifadesi içerenleri görüntüleyelim.


sudo crontab -e ile metin editörünü açalım. Her dakika tmux paketini yeniden yüklemeye çalışmak verimli bir kullanım değil çünkü apt komutunu her dakika çalıştırmak sistem kaynaklarını gereksiz yere tüketebilir ve tavsiye edilmez, nano’yu açıp ilgili satırı silelim. crontab -r komutu ise kullanıcının mevcut tüm cron görevlerini tamamen silmektedir.
Mesela her dakika sistemin tarih ve saatini kaydetmek amacıyla başka bir job oluşturalım.
* * * * * date >> /root/date.txt ile her dakika date komutunu çalıştırarak sistemin geçerli tarih ve saat bilgisini alır ve /root/date.txt dosyasına ekler.
* * * * * kısmı, cron job’ının her dakika çalışacak şekilde ayarlandığını belirtir. date komutu, geçerli tarih ve saati döndürürken, >> /root/date.txt kısmı bu çıktıyı dosyaya ekler.
Her dakika /root/date.txt dosyasına yeni bir tarih ve saat satırı eklenir. Dosyanın içeriği her zaman korunur ve yeni bilgiler mevcut dosyaya eklenmiş olur.

Dosyamızı kontrol edelim.

Splunk’ta cron, aramaları, uyarıları (alerts), raporları veya veri indeksleme işlemlerini belirli zaman aralıklarında çalıştırmak için kullanılan bir zamanlama mekanizmasıdır. Linux’taki crontab zamanlama formatı kullanılır, Splunk’taki cron ifadeleri dakika, saat, gün, ay, hafta günü sıralamasında çalışır.

Splunk search ekranında CRON verilerini indeksleyerek inceleyebilmekteyiz.


Okuduğunuz için teşekkür ederim..
https://www.siberguvenlik.web.tr/splunk-rsyslog/ Yayınlanan tüm yazılarım için => https://www.siberguvenlik.web.tr/author/mervecelikkol













