Ansible : Uzak Sistemlerde Cron İşlerini Yönetme

Ansible cron modülü, uzak sistemlerdeki cron işlerinin yönetimini otomatikleştirmek için kullanılır. Cron işi, cron daemon’ı tarafından tanımlanan belirli aralıklarla çalışan zamanlanmış bir görevdir. Cron modülü, bu görevleri Ansible playbook içinde programlı olarak yönetmenize olanak tanır.

Örneğin, bir MySQL veritabanını yedeklemek için her gün gece yarısı çalışacak bir betik planlamanız gerekiyorsa, cron modülü, zamanlamayı ve komutu doğrudan bir playbook tanımlamanıza olanak tanır ve tüm sunucularda tutarlı ve tekrarlanabilir bir yapılandırma sağlar. Bu, manuel cron giriş güncellemelerine olan ihtiyacı ortadan kaldırarak, büyük ölçekli sistemleri yönetmek veya yedekleme politikalarına uyumu sağlamak için idealdir.

Bu makalede, cron modülünün cron’da zamanlanmış görevler oluşturmak, değiştirmek ve silmek için nasıl kullanılacağını inceleyeceğiz.

Ansible Cron Modülünün Temel Sözdizimi

Cron modülü, cron işlerini tanımlamak için çok çeşitli seçenekler sunar. Modülü kullanan bir görevin temel yapısı aşağıdadır:

- name: Manage a cron job
  ansible.builtin.cron:
    name: "<Job_Name>"            
    user: "<Username>"            
    minute: "<Minute>"            
    hour: "<Hour>"                
    day: "<Day>"                  
    month: "<Month>"              
    weekday: "<Weekday>"          
    job: "<Command_to_execute>"   
    state: "<present|absent>"     

Önemli Parametreler:

  • name: Cron işi için benzersiz bir tanımlayıcı. Bu, Ansible’ın işi izlemesine ve yönetmesine yardımcı olur.
  • user: İşin hangi kullanıcı için oluşturulacağını belirtir.
  • minute, hour, day, month, weekday: Zamanlamayı standart cron sözdizimini kullanarak tanımlayın.
  • job: Çalıştırılacak komut veya betik.
  • state: İşin mevcut veya yok olması gerektiğini belirler.

Şimdi cron modülünü gerçek dünya senaryolarında nasıl kullanabileceğimize derinlemesine bakalım.

Yeni Bir Cron İşi Ekleme

Bir cron işi eklemek, görev adını, zamanlamayı ve yürütülecek komutu belirtmeyi içerir. Sabah 2’de günlük yedekleme gerçekleştiren bir cron işi ekleyelim.

- name: Add a daily backup cron job
  hosts: all
  tasks:
    - name: Schedule daily backup
      ansible.builtin.cron:
        name: "Daily Backup"
        user: "root"
        minute: "0"
        hour: "2"
        job: "/usr/bin/backup.sh"
        state: present

Bu kurulum, sistem yedeklemelerini otomatikleştirmek için idealdir. Örneğin, kuruluşunuz her gece veritabanı dökümlerine ihtiyaç duyuyorsa, bu cron işi yedeklemelerin tutarlı bir şekilde gerçekleştirilmesini sağlayabilir.

Bir Cron İşini Kaldırma

Sistemin düzenli kalması ve gereksiz görevlerden kaçınmak için güncelliğini yitirmiş veya gereksiz cron işlerini kaldırmak çok önemlidir. Bir cron işini kaldırmak için yapmanız gerekenler şunlardır:

- name: Remove a daily backup cron job
  hosts: all
  tasks:
    - name: Remove backup job
      ansible.builtin.cron:
        name: "Daily Backup"
        user: "root"
        state: absent

Bu playbook:

  • state: absent: Belirtilen cron işinin crontab’dan kaldırılmasını sağlar.

Kaldırma işlemini doğrulamak için Ansible’ın hata ayıklama modülünü de ekleyebilirsiniz:

- name: Verify removal
  debug:
    msg: "The cron job 'Daily Backup' has been removed."

Mevcut Bir Cron İşini Değiştirme

Operasyonel gereksinimlerdeki değişiklikler nedeniyle zaman çizelgelerinde sıklıkla ayarlamalar yapılması gerekir. Günlük yedekleme işini sabah 2 yerine sabah 3’te çalışacak şekilde değiştirelim.

- name: Modify backup cron job
  hosts: all
  tasks:
    - name: Change backup schedule to 3 AM
      ansible.builtin.cron:
        name: "Daily Backup"
        user: "root"
        minute: "0"
        hour: "3"
        job: "/usr/bin/backup.sh"
        state: present

Bu playbooka:

  • hour: "3": Yürütme süresini 02:00’den 03:00’e ayarlar.
  • state: present: Değiştirilen cron işinin var olduğundan emin olur.

Özel Zamanlama ile Bir Cron İşi Oluşturma

Bazen görevlerin daha sık aralıklarla, örneğin her 15 dakikada bir çalıştırılması gerekebilir. Böyle bir işi planlamak için şu adımları izleyin:

- name: Add a job to run every 15 minutes
  hosts: all
  tasks:
    - name: Schedule a monitoring script
      ansible.builtin.cron:
        name: "System Monitoring"
        user: "monitor"
        minute: "*/15"
        job: "/usr/bin/monitor.sh"
        state: present

Bu playbook:

  • minute: "*/15": İşin her 15 dakikada bir çalıştırılmasını sağlayan Cron sözdizimi.
  • job: "/usr/bin/monitor.sh": Bir izleme betiğini çalıştırır.

Bir Cron İşini Devre Dışı Bırakma

Bir cron işini kaldırmak yerine, onu geçici olarak devre dışı bırakmak isteyebilirsiniz. İşte nasıl:

- name: Disable a cron job
  hosts: all
  tasks:
    - name: Disable the monitoring job
      ansible.builtin.cron:
        name: "System Monitoring"
        user: "monitor"
        job: "/usr/bin/monitor.sh"
        disabled: yes

Bu playbook:

  • disabled: yes: Crontab dosyasındaki cron işini kaldırmadan yorum satırına dönüştürür. Bu, işin ileride yeniden etkinleştirilmek üzere sistemde kalmasını sağlar.
Yazının orijinalini buradan okuyabilirsiniz.

Hüseyin GÜÇ

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım. Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum. Son 6 yıldır  sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum. Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.