at
cron tekrarlayan görevler için kullanılırken, at komutu belirli komutların veya betiklerin gelecekte belirli bir zamanda sadece bir kez çalıştırılmasını sağlamak için kullanılır.
atd Servisi
atd Servisiat komutu ile zamanlanan görevlerin çalıştırılabilmesi için sistemde atd (at daemon) servisinin çalışıyor olması gerekir. Çoğu dağıtımda varsayılan olarak kurulu ve etkin olabilir, ancak kontrol etmek gerekebilir:
# Servisin durumunu kontrol et
sudo systemctl status atd
# Gerekirse başlat ve etkinleştir
# sudo systemctl start atd
# sudo systemctl enable atdGörev Zamanlama
at komutuna çalıştırılacak zaman parametre olarak verilir. Zaman belirtildikten sonra, at komutu standart girdiden çalıştırılacak komutları okumaya başlar. Komutları girdikten sonra, genellikle yeni bir satırda Ctrl+D tuş kombinasyonuna basarak girdi sonlandırılır ve görev zamanlanır.
Zaman Belirtme Formatları:
at komutu oldukça esnek bir zaman belirtme formatını anlar:
Kesin Zaman:
HH:MM: Bugün belirtilen saatte (eğer saat geçmişse yarın). Örn:at 14:30HH:MM YYYY-MM-DD: Belirtilen tarih ve saatte. Örn:at 09:00 2025-12-25noon(öğlen),midnight(gece yarısı),teatime(16:00) gibi anahtar kelimeler.HH:MM <gün_adı>: Gelecek belirtilen günde. Örn:at 11:00 Sunday
Göreceli Zaman:
now + <sayı> <birim>: Şu andan itibaren belirtilen süre sonra. Birimler:minutes,hours,days,weeks. Örn:at now + 1 hour,at now + 30 minutesHH:MM tomorrow: Yarın belirtilen saatte.HH:MM next <birim>: Gelecek hafta/ay/yıl belirtilen saatte. Örn:at 10:00 next week
Örnek Kullanım (İnteraktif):
$ at 10:30 tomorrow 
warning: commands will be executed using /bin/sh
at> echo "Bu mesaj yarın sabah 10:30'da loglanacak" >> /home/user/at_test.log
at> echo "İkinci komut" >> /home/user/at_test.log
at> <Ctrl+D>  # Girdiyi bitir
job 1 at Mon Mar 31 10:30:00 2025 Bu komutlar, belirtilen zamanda (Mon Mar 31 10:30:00 2025) /bin/sh kabuğu kullanılarak çalıştırılacaktır.
Örnek Kullanım (Pipe ile):
Tek bir komutu zamanlamak için echo ve pipe kullanılabilir:
echo "/usr/local/bin/gece_yarisi_betigi.sh" | at midnightÖrnek Kullanım (Dosyadan):
Çalıştırılacak komutları içeren bir dosyayı -f seçeneği ile belirtebilirsiniz:
# komutlar.txt dosyasının içeriği:
# echo "Dosyadan gelen görev"
# date
at -f komutlar.txt now + 5 minutes Zamanlanmış Görevleri Yönetme
Görevleri Listeleme (
atqveyaat -l): Kullanıcının bekleyenatgörevlerini listeler. Her görevin bir iş numarası (job ID) vardır.$ atq 1 Mon Mar 31 10:30:00 2025 a user 2 Tue Apr 1 00:00:00 2025 a userGörevi Silme (
atrmveyaat -d): Belirtilen iş numarasına sahip görevi kuyruktan kaldırır.atrm 1 # veya at -d 2Görevin İçeriğini Görme (
at -c): Belirtilen iş numarasına sahip görevin çalıştıracağı komutları (ve ortam değişkenlerini) gösterir.at -c 1
Erişim Kontrolü
Hangi kullanıcıların at komutunu kullanabileceği /etc/at.allow ve /etc/at.deny dosyaları ile kontrol edilebilir:
Eğer
/etc/at.allowdosyası varsa, sadece bu dosyada listelenen kullanıcılaratkullanabilir.Eğer
/etc/at.allowyoksa ama/etc/at.denyvarsa, bu dosyada listelenen kullanıcılar dışındaki herkesatkullanabilir.Eğer iki dosya da yoksa, genellikle sadece root kullanıcısı
atkullanabilir (dağıtıma göre değişebilir).
at komutu, tek seferlik görevleri basitçe zamanlamak için kullanışlı bir araçtır. Tekrarlayan görevler için cron veya systemd timer'ları daha uygundur.
Last updated