---
title: "Cara Membuat Cron Job di Linux dan Contohnya"
description: "Panduan cron job di Linux: arti lima kolom jadwal, crontab user dan sistem, contoh siap pakai, log output, jebakan PATH, dan systemd timer."
url: "https://nivelva.com/insight/cron-job-linux"
category: "Server \u0026 Infrastruktur"
tags: ["cron job","crontab","linux","otomasi server","systemd timer"]
author: "Theresia Candiawan"
published: "2026-11-06T21:01:00+07:00"
updated: "2026-11-06T21:01:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Membuat Cron Job di Linux dan Contohnya

> **Jawaban singkat:** Cron menjalankan perintah sesuai jadwal lima kolom: menit, jam, tanggal, bulan, dan hari. Buat dengan crontab -e, pakai path lengkap, arahkan output ke log, dan ingat cron berjalan dengan environment minimal. Untuk jadwal yang butuh logging rapi atau catch-up setelah mati, systemd timer lebih cocok.

Ada skrip yang harus jalan sendiri setiap malam, tanpa kamu login ke server? Itu tugas cron. Cron adalah layanan penjadwal bawaan hampir semua distro Linux: kamu menulis satu baris berisi jadwal dan perintah, lalu cron menjalankannya tepat waktu, berulang, sampai baris itu dihapus.

Yang membuat orang tersandung biasanya bukan sintaksnya, tapi hal kecil di sekitarnya: perintah jalan normal di terminal tapi gagal di cron, output hilang entah ke mana, atau jadwal meleset karena zona waktu. Panduan ini membahas semuanya berurutan.

## Bagaimana membaca lima kolom jadwal cron?

Setiap baris crontab punya format:

```text
┌ menit (0-59)
│ ┌ jam (0-23)
│ │ ┌ tanggal (1-31)
│ │ │ ┌ bulan (1-12)
│ │ │ │ ┌ hari dalam minggu (0-7, 0 dan 7 = Minggu)
│ │ │ │ │
* * * * * perintah
```

Simbol yang perlu diingat cukup empat. Bintang `*` berarti "setiap". Koma memisahkan beberapa nilai (`1,15`). Tanda hubung membuat rentang (`1-5` untuk Senin sampai Jumat). Garis miring membuat kelipatan (`*/10` di kolom menit berarti setiap 10 menit).

Ada satu sifat yang sering mengejutkan: bila kolom tanggal dan hari sama-sama diisi (bukan `*`), cron menjalankan perintah ketika **salah satu** cocok, bukan keduanya. Jadi `0 9 1 * 1` berjalan setiap tanggal 1 dan juga setiap Senin.

## Langkah membuat cron job

### Langkah 1. Buka crontab user

```bash
crontab -e
```

Perintah ini membuka crontab milik user yang sedang login di editor. Simpan dan keluar, cron langsung memuat perubahan tanpa perlu restart. Lihat isinya dengan `crontab -l`. Hati-hati dengan `crontab -r`, karena perintah itu menghapus seluruh crontab tanpa konfirmasi.

Untuk tugas yang butuh hak root, gunakan `sudo crontab -e`. Jangan menjalankan semuanya sebagai root hanya karena praktis. Tugas aplikasi sebaiknya jalan sebagai user aplikasinya.

### Langkah 2. Tulis perintah dengan path lengkap

Cron tidak memuat `.bashrc` atau profil login kamu. PATH-nya biasanya sangat pendek, seperti `/usr/bin:/bin`. Akibatnya, perintah yang terpasang di `/usr/local/bin` atau lewat nvm, pyenv, dan sejenisnya tidak ditemukan.

Solusinya: tulis path lengkap, atau tetapkan variabel di bagian atas crontab.

```text
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""

15 1 * * * /usr/local/bin/bersih-cache.sh
```

Cari path sebuah perintah dengan `command -v nama-perintah`.

### Langkah 3. Arahkan output ke log

Secara bawaan, cron mencoba mengirim output perintah lewat email lokal. Di banyak VPS tidak ada mail server, jadi output itu hilang begitu saja. Simpan ke file:

```text
0 3 * * * /usr/local/bin/laporan.sh >> /var/log/laporan.log 2>&1
```

`>>` menambahkan ke file, `2>&1` ikut menangkap pesan error. Jangan lupa log ini juga perlu dirotasi agar tidak membengkak. Log yang tumbuh tanpa batas adalah salah satu penyebab disk server penuh.

### Langkah 4. Pastikan tidak tumpang tindih

Kalau tugas dijadwalkan tiap 5 menit tapi kadang butuh 7 menit, dua proses bisa berjalan bersamaan dan saling mengganggu. Bungkus dengan `flock`:

```text
*/5 * * * * flock -n /tmp/sinkron.lock /usr/local/bin/sinkron.sh
```

Dengan `-n`, proses baru langsung keluar bila proses sebelumnya masih memegang kunci.

### Langkah 5. Uji dengan environment ala cron

Cara cepat meniru kondisi cron adalah menjalankan skrip dengan environment kosong:

```bash
env -i /bin/bash -c '/usr/local/bin/laporan.sh'
```

Kalau di sini gagal, di cron juga akan gagal. Untuk memastikan cron benar-benar mengeksekusi, lihat log sistem: `journalctl -u cron` di Debian dan Ubuntu, atau `journalctl -u crond` di keluarga Red Hat.

## Contoh cron job yang sering dipakai

| Jadwal | Baris crontab | Arti |
|:--|:--|:--|
| Setiap 10 menit | `*/10 * * * * perintah` | Menit 0, 10, 20, dan seterusnya |
| Setiap jam lewat 5 menit | `5 * * * * perintah` | 01.05, 02.05, ... |
| Harian pukul 02.30 | `30 2 * * * perintah` | Cocok untuk backup |
| Hari kerja pukul 08.00 | `0 8 * * 1-5 perintah` | Senin sampai Jumat |
| Setiap Minggu tengah malam | `0 0 * * 0 perintah` | Pembersihan mingguan |
| Tanggal 1 tiap bulan | `0 6 1 * * perintah` | Laporan bulanan |
| Saat server menyala | `@reboot perintah` | Sekali setelah boot |

Singkatan seperti `@daily`, `@weekly`, dan `@reboot` didukung oleh implementasi cron yang umum di Linux. Contoh nyata untuk backup ada di [backup database otomatis](https://nivelva.com/insight/backup-database-otomatis).

## Apa beda crontab user dan crontab sistem?

Crontab user (yang diedit dengan `crontab -e`) tidak punya kolom user, karena semua perintahnya berjalan sebagai pemiliknya.

File sistem seperti `/etc/crontab` dan file di `/etc/cron.d/` punya satu kolom tambahan setelah jadwal, yaitu nama user:

```text
0 4 * * * www-data /usr/local/bin/laporan.sh
```

Paket perangkat lunak biasanya menaruh jadwalnya di `/etc/cron.d/`. Ada juga folder `/etc/cron.daily/`, `/etc/cron.weekly/`, dan seterusnya, berisi skrip yang dijalankan sesuai nama foldernya. Di Debian dan Ubuntu, nama file di folder itu tidak boleh mengandung titik, sehingga `backup.sh` tidak akan dijalankan tapi `backup` akan.

Zona waktu juga patut dicek. Cron memakai zona waktu sistem, jadi pastikan `timedatectl` menunjukkan zona yang kamu maksud, misalnya `Asia/Jakarta`.

## Kapan memakai systemd timer daripada cron?

Cron tetap pilihan paling ringkas untuk jadwal sederhana. systemd timer layak dipertimbangkan bila kamu butuh:

- **Catch-up:** dengan `Persistent=true`, jadwal yang terlewat karena server mati dijalankan begitu server menyala.
- **Log otomatis:** output masuk ke journal dan bisa dibaca dengan `journalctl -u nama.service`.
- **Kontrol sumber daya:** batas CPU, memori, atau user khusus bisa diatur di unit service.
- **Status yang jelas:** `systemctl list-timers` menampilkan jadwal berikutnya dan kapan terakhir jalan.

Gantinya, kamu menulis dua file (service dan timer) untuk setiap tugas. Cara menulis unit service dibahas di membuat service systemd.

## Pertanyaan yang sering diajukan

### Kenapa skrip jalan normal di terminal tapi tidak di cron?

Penyebab paling umum adalah PATH dan variabel environment yang berbeda, path relatif ke file, atau izin eksekusi. Pakai path lengkap, cd ke folder kerja di awal skrip, dan uji dengan env -i.

### Bisakah cron menjalankan tugas setiap detik?

Tidak. Satuan terkecil cron adalah menit. Untuk interval di bawah satu menit, gunakan systemd timer atau proses yang berjalan terus dengan jeda di dalamnya.

### Bagaimana menonaktifkan cron job sementara?

Tambahkan tanda pagar di awal barisnya lewat crontab -e. Baris yang diawali pagar dianggap komentar dan tidak dijalankan.

### Apakah persen di perintah cron perlu perlakuan khusus?

Ya. Di crontab, tanda persen diartikan sebagai baris baru. Tulis sebagai \% bila dipakai di perintah, misalnya pada format tanggal date +\%F.

Sebelum meninggalkan crontab yang baru kamu tulis:

- Jadwal sudah dicek ulang, terutama kolom tanggal dan hari
- Semua perintah memakai path lengkap atau PATH sudah ditetapkan
- Output diarahkan ke log yang dirotasi
- Tugas panjang dibungkus `flock`
- Skrip sudah diuji dengan `env -i`
- Zona waktu server sesuai harapan

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/cron-job-linux
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
