crontab.run

Crontab komutu açıklaması

Cron arka plan hizmeti (crond), Unix benzeri işletim sistemlerinde zamanlanmış komutları yürüten bir arka plan servisidir. Yapılandırmayı, her komutun ne zaman ve ne sıklıkta çalışması gerektiğini tanımlayan crontab (cron tablosu) dosyalarından okur.

Söz dizimi

Crontab komutu, kullanıcı başına crontab dosyalarını yönetir:

crontab [-u user] [-l | -r | -e | -i] [file]

Seçenekler

-e
Mevcut kullanıcının crontab'ını varsayılan düzenleyicide ($VISUAL veya $EDITOR) düzenleyin. Düzenleyici kapandıktan sonra yeni crontab yüklenir.
-l
Mevcut kullanıcının crontab'ını standart çıktıya görüntüleyin.
-r
Mevcut kullanıcının crontab'ını tamamen kaldırın.
-i
Kaldırmadan önce onay isteyin (-r ile kullanılır).
-u user
Kendi crontab'ınız yerine belirtilen kullanıcının crontab'ı üzerinde işlem yapın. Root yetkileri gerektirir.
file
Crontab'ı verilen dosyadan yükleyin. Standart girdi için - kullanın.

Crontab dosya biçimi

Bir crontab dosyasındaki her satır ya bir ortam değişkeni ataması, bir yorum (# ile başlayan) ya da şu biçimde bir cron görevidir:

┌───────────── dakika (0–59)
│ ┌───────────── saat (0–23)
│ │ ┌───────────── ayın günü (1–31)
│ │ │ ┌───────────── ay (1–12 veya JAN–DEC)
│ │ │ │ ┌───────────── haftanın günü (0–6 veya SUN–SAT)
│ │ │ │ │
* * * * *  çalıştırılacak komut

Alan operatörleri

* (asterisk)
Alan için her olası değeri eşleştirir.
, (comma)
Bir değer listesi belirtir. Örnek: ayın günü alanında 1,15 ayın 1'i ve 15'i anlamına gelir.
- (hyphen)
Kapsayıcı bir aralık tanımlar. Örnek: saat alanında 9-17, 9'dan 17'ye kadar her saati ifade eder.
/ (slash)
Bir adım tanımlar. Örnek: dakika alanında */10, her 10 dakikada bir anlamına gelir. Bir aralıkla birleştirilebilir: 1-30/5.

Özel dizeler

Beş zaman alanı yerine şu kısaltma dizelerinden birini kullanabilirsiniz:

StringEquivalent
@yearly / @annually0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily / @midnight0 0 * * *
@hourly0 * * * *
@rebootRun once at startup

Ortam değişkenleri

Bir crontab dosyasının başında ortam değişkenleri ayarlayabilirsiniz. En yaygın olanları:

SHELL
Komutları çalıştırmak için kullanılan kabuk (varsayılan: /bin/sh).
PATH
Komutlar için arama yolu. Cron'un varsayılan PATH'i minimaldir (genellikle /usr/bin:/bin), bu nedenle her zaman mutlak yollar kullanın veya PATH'i açıkça ayarlayın.
MAILTO
Komut çıktısının gönderileceği yer. E-postayı bastırmak için "" olarak ayarlayın. Varsayılan olarak çıktı crontab sahibine e-postayla gönderilir.
CRON_TZ
Crontab için zaman dilimini ayarlayın (tüm sistemlerde desteklenmez). Bu olmadan cron, sistem zaman dilimini kullanır.
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
[email protected]

*/5 * * * * /home/user/scripts/backup.sh

Sistem crontab'ı ve kullanıcı crontab'ı

Kullanıcı crontab'ları (crontab -e ile düzenlenen) beş zaman alanı ve komutu içerir. Sistem crontab'ı (/etc/crontab) ve /etc/cron.d/ içindeki dosyalar, zaman alanları ile komut arasında ekstra bir alan içerir: komutun çalıştırılacağı kullanıcı adı.

Sistem crontab örneği:

# /etc/crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m  h  dom mon dow user    command
*/15 *  *   *   *   root    /usr/local/bin/system-check.sh
0    2  *   *   *   backup  /usr/local/bin/nightly-backup.sh

Yaygın tuzaklar

% (percent sign)

Yüzde işareti (%) crontab'da özel bir anlama sahiptir: yeni satıra çevrilir ve ilk %'den sonraki her şey komuta standart girdi olarak gönderilir. Gerçek bir % kullanmak için \% olarak kaçış yapın.

# Wrong — the % will be interpreted
0 0 * * * echo "Date: $(date +%Y-%m-%d)"

# Correct — escape the %
0 0 * * * echo "Date: $(date +\%Y-\%m-\%d)"

PATH

Cron minimal bir PATH ile çalışır. /usr/local/bin veya diğer dizinlerdeki komutlara bağlı betikler ya mutlak yollar kullanmalı ya da crontab'ın başında PATH ayarlamalıdır.

Day-of-month + day-of-week

Hem ayın günü hem de haftanın günü kısıtlı olduğunda (* olmayan), cron her iki alan eşleştiğinde değil, herhangi biri eşleştiğinde komutu çalıştırır (OR mantığı). Örneğin, 0 0 1 * 5 her ayın 1'inde gece yarısı VE her cuma çalışır.

Timezone

Cron varsayılan olarak sistem zaman dilimini kullanır. Sunucunuz UTC'de ise ancak görevleri yerel bir zaman diliminde istiyorsanız, CRON_TZ kullanın (desteklenen yerlerde) veya zamanları manuel olarak dönüştürün.

Output and logging

Varsayılan olarak cron, tüm çıktıyı (stdout ve stderr) crontab sahibine e-postayla gönderir. Bir görevi sessize almak için çıktıyı yönlendirin: command > /dev/null 2>&1. Çıktıyı günlüğe kaydetmek için bir dosyaya yönlendirin: command >> /var/log/myjob.log 2>&1.

# Discard all output
*/5 * * * * /path/to/script.sh > /dev/null 2>&1

# Log output to a file
*/5 * * * * /path/to/script.sh >> /var/log/myscript.log 2>&1

Pratik örnekler