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 dieksekusiOperator 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:
| String | Equivalent |
|---|---|
@yearly / @annually | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily / @midnight | 0 0 * * * |
@hourly | 0 * * * * |
@reboot | Run 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.shCrontab 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.shKesalahan 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>&1Contoh praktis
*/5 * * * *— run every 5 minutes0 0 * * *— run once a day at midnight0 9 * * 1-5— run at 9 AM on weekdays0 0 1 * *— run at midnight on the 1st of every month0 0 * * 0— run at midnight every Sunday