Linux / Cara Menggunakan Crontab

Di Linux, menggunakan crontab memungkinkan Anda mengeksekusi perintah atau skrip berulang kali pada waktu yang ditentukan. Dengan crontab -e, Anda dapat mengedit tugas terjadwal pengguna saat ini, memasukkan lima bidang waktu dan perintah untuk dijalankan dalam satu baris.

Perbedaan Antara cron dan crontab

cron adalah layanan yang secara rutin memeriksa dan mengeksekusi tugas yang dijadwalkan. crontab adalah daftar tugas yang mencatat waktu eksekusi dan perintah, biasanya dikelola secara terpisah untuk setiap pengguna. Contoh-contoh dalam artikel ini berdasarkan crontab pengguna tipikal dari seri Debian dan Ubuntu. Metode instalasi, nama layanan, dan fitur yang didukung mungkin berbeda tergantung pada distribusi dan implementasi cron.

Tugas yang dijadwalkan dieksekusi dengan hak istimewa pemilik crontab yang bersangkutan. Jika diperlukan hak istimewa yang tidak dimiliki oleh pengguna saat ini, atur akun administrator dan eksekusi dengan hati-hati, dan jangan buat tugas dengan hak istimewa yang terlalu luas secara tidak perlu. Tugas yang dijadwalkan pada waktu ketika komputer dimatikan atau layanan cron dihentikan tidak akan dieksekusi.

Memeriksa dan Mengedit Crontab

Di terminal, gunakan perintah berikut untuk memeriksa tugas yang dijadwalkan dari pengguna saat ini. Jika muncul pesan yang mengatakan bahwa tidak ada daftar, itu berarti pengguna ini belum memiliki crontab.

crontab -l

Untuk menambahkan atau mengubah tugas, jalankan perintah berikut. Layar pemilihan editor mungkin muncul pertama kali Anda menjalankannya. Setelah menyimpan file dan keluar dari editor, cron akan memeriksa sintaks dan memasang daftar baru. Jika muncul kesalahan, edit lagi sesuai instruksi dan pastikan pesan pemasangan ditampilkan.

crontab -e

Tugas yang dijadwalkan untuk akun administrator terpisah dari pengguna saat ini. Hanya sunting daftar root dengan sudo crontab -e dan periksa dengan sudo crontab -l saat hak administratif diperlukan. Jangan bingung antara kedua daftar tersebut.

Untuk menghapus satu tugas, hapus hanya baris itu dengan crontab -e dan simpan. crontab -r menghapus seluruh daftar tugas terjadwal pengguna saat ini, jadi periksa daftar tersebut sebelum menggunakannya dan buat cadangan di lokasi yang aman jika perlu. Anda dapat membuat cadangan dengan crontab -l > ~/crontab-backup.txt, dan jika perlu pemulihan, pasang kembali seluruh file dengan crontab ~/crontab-backup.txt. Pemulihan akan menimpa daftar saat ini, jadi periksa perubahan apa pun terlebih dahulu.

Format waktu yang dijadwalkan

Setiap pekerjaan dalam crontab pengguna terdiri dari lima bidang waktu yang diikuti oleh perintah. Dalam file crontab sistem seperti /etc/crontab atau /etc/cron.d/, sebuah bidang pengguna eksekusi tambahan ditambahkan di antara bidang waktu dan perintah, jadi jangan menyalin format di bawah ini begitu saja.

minute hour day-of-month month day-of-week command
Bidang Rentang yang Diperbolehkan Makna
menit 0–59 Menit
jam 0–23 Jam
hari dalam bulan 1–31 Tanggal
bulan 1–12 Bulan
hari-dalam-minggu 0–7 Hari dalam minggu. 0 dan 7 adalah Minggu

* mengacu pada semua nilai dalam kolom. Koma menunjukkan beberapa nilai (10,20), tanda hubung menunjukkan rentang (1-5), dan garis miring menunjukkan interval dalam rentang (*/10). Misalnya, */10 pada kolom menit berarti 0, 10, 20, 30, 40, 50 menit setiap jam. Interval ditafsirkan dalam setiap kolom, jadi mereka tidak selalu menjamin jarak yang sama berdasarkan waktu yang telah berlalu.

Jika tanggal dan hari dalam minggu dibatasi, cron Debian akan berjalan pada hari yang memenuhi salah satu kondisi. Misalnya, 0 4 1 * 1 berjalan pada pukul 4 pagi setiap tanggal 1 dan setiap hari Senin, bukan hanya ketika tanggal 1 jatuh pada hari Senin. Periksa man 5 crontab atau dokumentasi Debian tentang format crontab untuk keterangan lebih lanjut.

Contoh pekerjaan terjadwal

Ganti /home/user/bin/backup.sh dalam contoh berikut dengan jalur absolut dari skrip yang sebenarnya. Pengguna harus memiliki akses ke skrip dan file target, dan jika menjalankan skrip secara langsung, juga diperlukan izin eksekusi dan spesifikasi interpreter yang benar. Pertama, jalankan di terminal dengan akun yang sama untuk memverifikasi hasilnya.

0 4 * * * /home/user/bin/backup.sh
0 4 * * 1-5 /home/user/bin/backup.sh
*/10 4 * * * /home/user/bin/backup.sh

Baris pertama dijalankan setiap hari pukul 4 pagi, baris kedua dijalankan Senin hingga Jumat pukul 4 pagi, dan baris ketiga dijalankan setiap 10 menit dari pukul 4 pagi hingga 4:50 pagi. Contoh-contoh ini adalah jadwal independen. Ketika semuanya dimasukkan, semua tugas pada setiap baris akan terdaftar.

Daftarkan dan uji sebuah pekerjaan dengan aman

Saat berlatih, alih-alih melakukan backup yang sebenarnya, cobalah menggunakan tugas yang meninggalkan catatan di direktori home pengguna saat ini.

  1. Jalankan crontab -e, tambahkan satu baris berikut, lalu simpan dan keluar. Tanggal dan waktu akan ditambahkan ke file setiap menit.
* * * * * /bin/date >> "$HOME/cron-test.log" 2>&1
  1. Jalankan crontab -l untuk memeriksa entri yang terpasang. Setelah 1–2 menit, jalankan cat ~/cron-test.log dan periksa bahwa sebuah catatan telah ditambahkan.
  2. Setelah dikonfirmasi, hapus hanya entri latihan dengan crontab -e dan simpan. Anda dapat menghapus file log setelah memeriksa isinya.

Jika latihan tidak berfungsi, periksa apakah layanan cron sudah diinstal dan berjalan. Dalam paket cron Ubuntu biasa, Anda dapat melihat statusnya dengan systemctl status cron. Nama layanan dan lokasi log bervariasi menurut distribusi, dan dalam lingkungan Ubuntu yang menggunakan jurnal systemd, Anda dapat memeriksa log layanan dengan journalctl -u cron.

Hal-hal yang Perlu Diperiksa Saat Tidak Berjalan

cron mungkin berjalan di lingkungan yang berbeda dari shell login. Tentukan perintah dan skrip dengan jalur absolut kapan pun memungkinkan, dan definisikan dengan jelas variabel lingkungan yang diperlukan serta direktori kerja dalam skrip. Untuk memeriksa kesalahan, Anda juga dapat mengalihkan output dan kesalahan pekerjaan ke file log yang dapat diakses oleh pengguna. Karena log dapat berisi informasi sensitif, berhati-hatilah dengan izin akses dan periode retensi.

Periksa apakah waktu sistem dan zona waktu sesuai dengan yang diharapkan, apakah akun eksekusi dapat mengakses file, dan apakah ada kemungkinan eksekusi yang tumpang tindih. % yang digunakan dalam perintah diperlakukan secara khusus oleh cron, jadi untuk melewatkannya secara literal, biasanya perlu di-escape dengan \%. Periksa dokumentasi cron yang Anda gunakan untuk perilaku yang tepat.