crontab.run

Penjelasan perintah crontab

Daemon cron (crond) adalah layanan latar belakang pada sistem operasi Unix yang mengeksekusi perintah terjadwal. Daemon ini membaca konfigurasi dari file crontab (tabel cron), yang mendefinisikan kapan dan seberapa sering setiap perintah harus dijalankan.

Sintaks

Perintah crontab mengelola file crontab per pengguna:

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

Opsi

-e
Edit crontab pengguna saat ini di editor bawaan ($VISUAL atau $EDITOR). Crontab baru dipasang setelah editor ditutup.
-l
Tampilkan crontab pengguna saat ini ke output standar.
-r
Hapus crontab pengguna saat ini sepenuhnya.
-i
Minta konfirmasi sebelum menghapus (digunakan dengan -r).
-u user
Operasikan pada crontab pengguna yang ditentukan alih-alih milik Anda sendiri. Memerlukan hak akses root.
file
Pasang crontab dari file yang diberikan. Gunakan - untuk input standar.

Format file crontab

Setiap baris dalam file crontab berupa penetapan variabel lingkungan, komentar (dimulai dengan #), atau tugas cron dengan format ini:

┌───────────── menit (0–59)
│ ┌───────────── jam (0–23)
│ │ ┌───────────── hari dalam bulan (1–31)
│ │ │ ┌───────────── bulan (1–12 atau JAN–DEC)
│ │ │ │ ┌───────────── hari dalam minggu (0–6 atau SUN–SAT)
│ │ │ │ │
* * * * *  perintah yang dieksekusi

Operator bidang

* (asterisk)
Cocok dengan setiap nilai yang mungkin untuk bidang tersebut.
, (comma)
Menentukan daftar nilai. Contoh: 1,15 di bidang hari-dalam-bulan berarti tanggal 1 dan 15.
- (hyphen)
Mendefinisikan rentang inklusif. Contoh: 9-17 di bidang jam berarti setiap jam dari 9 hingga 17.
/ (slash)
Mendefinisikan langkah. Contoh: */10 di bidang menit berarti setiap 10 menit. Dapat dikombinasikan dengan rentang: 1-30/5.

String khusus

Alih-alih lima bidang waktu, Anda dapat menggunakan salah satu string singkatan berikut:

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

Variabel lingkungan

Anda dapat mengatur variabel lingkungan di bagian atas file crontab. Yang paling umum:

SHELL
Shell yang digunakan untuk menjalankan perintah (bawaan: /bin/sh).
PATH
Jalur pencarian untuk perintah. PATH bawaan cron minimal (biasanya /usr/bin:/bin), jadi selalu gunakan jalur absolut atau atur PATH secara eksplisit.
MAILTO
Ke mana mengirim output perintah. Atur ke "" untuk menekan email. Secara bawaan, output dikirim ke pemilik crontab.
CRON_TZ
Mengatur zona waktu untuk crontab (tidak didukung di semua sistem). Tanpa ini, cron menggunakan zona waktu sistem.
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
[email protected]

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

Crontab sistem vs. crontab pengguna

Crontab pengguna (diedit dengan crontab -e) memiliki lima bidang waktu ditambah perintah. Crontab sistem (/etc/crontab) dan file di /etc/cron.d/ memiliki bidang tambahan antara bidang waktu dan perintah: nama pengguna yang menjalankan perintah tersebut.

Contoh crontab sistem:

# /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

Kesalahan umum

% (percent sign)

Tanda persen (%) memiliki arti khusus dalam crontab: diterjemahkan menjadi baris baru, dan semua yang ada setelah % pertama dikirim sebagai input standar ke perintah. Untuk menggunakan % secara harfiah, escape dengan \%.

# 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 berjalan dengan PATH minimal. Skrip yang bergantung pada perintah di /usr/local/bin atau direktori lain harus menggunakan jalur absolut atau mengatur PATH di bagian atas crontab.

Day-of-month + day-of-week

Ketika hari-dalam-bulan dan hari-dalam-minggu keduanya dibatasi (bukan *), cron menjalankan perintah ketika salah satu bidang cocok (logika OR), bukan ketika keduanya cocok. Misalnya, 0 0 1 * 5 berjalan pada tengah malam tanggal 1 setiap bulan DAN setiap Jumat.

Timezone

Cron menggunakan zona waktu sistem secara bawaan. Jika server Anda di UTC tetapi Anda ingin tugas berjalan di zona waktu lokal, gunakan CRON_TZ (jika didukung) atau konversi waktu secara manual.

Output and logging

Secara bawaan, cron mengirimkan semua output (stdout dan stderr) ke pemilik crontab. Untuk membisukan tugas, arahkan output: command > /dev/null 2>&1. Untuk mencatat output, arahkan ke file: 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

Contoh praktis