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 atd
Gö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:30
HH:MM YYYY-MM-DD
: Belirtilen tarih ve saatte. Örn:at 09:00 2025-12-25
noon
(öğ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 minutes
HH: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 (
atq
veyaat -l
): Kullanıcının bekleyenat
gö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 user
Görevi Silme (
atrm
veyaat -d
): Belirtilen iş numarasına sahip görevi kuyruktan kaldırır.atrm 1 # veya at -d 2
Gö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.allow
dosyası varsa, sadece bu dosyada listelenen kullanıcılarat
kullanabilir.Eğer
/etc/at.allow
yoksa ama/etc/at.deny
varsa, bu dosyada listelenen kullanıcılar dışındaki herkesat
kullanabilir.Eğer iki dosya da yoksa, genellikle sadece root kullanıcısı
at
kullanabilir (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