15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
24.10.2024
1 +1

Cara Menampilkan dan Membuat Daftar Cron Jobs Menggunakan Crontab

Perintah crontab adalah antarmuka utama untuk melihat, mengedit, dan mengelola tugas terjadwal dalam sistem cron Unix. Untuk menampilkan semua cron job milik pengguna yang sedang login, jalankan crontab -l di terminal mana pun. Untuk job root atau seluruh sistem, periksa /etc/crontab, /etc/cron.d/, dan /var/spool/cron/crontabs/ secara langsung.

Cron adalah tulang punggung otomatisasi tugas pada sistem Linux dan Unix. Baik Anda menjalankan dump database setiap malam di lingkungan VPS Hosting, merotasi log di Dedicated Server, atau memperbarui SSL Certificates secara otomatis melalui Certbot, memahami cara mengaudit dan menampilkan setiap tugas terjadwal pada sebuah mesin adalah keterampilan sysadmin yang tidak bisa diabaikan. Panduan ini mencakup setiap lapisan tumpukan cron — user crontab, system crontab, direktori drop-in, dan spool — beserta kendala nyata yang sering menjebak bahkan engineer berpengalaman sekalipun.

Apa Itu Crontab dan Bagaimana Sistem Cron Bekerja

Crontab (singkatan dari “cron table”) adalah file konfigurasi per-pengguna yang memberi instruksi kepada daemon crond tentang perintah apa yang harus dijalankan dan kapan. Setiap akun pengguna pada sebuah sistem — termasuk root — dapat memiliki crontab tersendiri. Daemon membaca file-file ini saat startup dan setelah setiap pengeditan, lalu menjalankan job sesuai spesifikasi waktunya.

Ekosistem cron pada distribusi Linux modern terdiri dari beberapa lapisan yang berbeda:

  • User crontab — dikelola melalui crontab -e dan disimpan di /var/spool/cron/crontabs/ (Debian/Ubuntu) atau /var/spool/cron/ (RHEL/CentOS)
  • System crontab — file /etc/crontab, yang menyertakan field user tambahan per entri
  • Direktori drop-in/etc/cron.d/, tempat paket menginstal definisi job mereka sendiri
  • Direktori run-parts/etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/, yang berisi skrip yang dapat dieksekusi, bukan file berformat sintaks crontab
  • Anacron — suplemen untuk cron yang menangani job pada mesin yang tidak berjalan 24/7, membaca dari /etc/anacrontab

Memahami lapisan mana tempat sebuah job berada sangat penting saat mengaudit server, karena crontab -l saja akan melewatkan sebagian besar tugas terjadwal pada sistem produksi yang umum.

Sintaks Field Waktu Crontab

Setiap entri crontab mengikuti spesifikasi waktu lima field tetap sebelum perintah:

* * * * *  command_to_execute
| | | | |
| | | | +----- day of the week  (0–7, Sunday = 0 or 7)
| | | +------- month            (1–12)
| | +--------- day of the month (1–31)
| +----------- hour             (0–23)
+------------- minute           (0–59)

Pintasan sintaks khusus yang didukung oleh sebagian besar implementasi cron:

PintasanSetaraArti
@rebootJalankan sekali saat daemon startup
@yearly0 0 1 1 *Sekali per tahun
@monthly0 0 1 * *Hari pertama setiap bulan
@weekly0 0 * * 0Setiap Minggu tengah malam
@daily0 0 * * *Setiap hari tengah malam
@hourly0 * * * *Di awal setiap jam

File /etc/crontab dan /etc/cron.d/ menambahkan field keenam — nama pengguna yang menjalankan perintah — di antara spesifikasi waktu dan perintah itu sendiri.

Cara Menampilkan Cron Job: Semua Metode Dijelaskan

1. Melihat Cron Job Pengguna Anda Sendiri

crontab -l

Ini mencetak crontab untuk pengguna yang menjalankan perintah. Jika belum ada crontab, Anda akan melihat output kosong atau pesan no crontab for <username> — keduanya normal.

Contoh output:

# m  h   dom mon dow  command
0    0   *   *   *    /home/deploy/backup.sh
30   2   *   *   7    /home/deploy/scripts/cleanup.sh
15   */4 *   *   *    /usr/local/bin/health-check.sh >> /var/log/health.log 2>&1

Dalam contoh ini:

  • backup.sh berjalan setiap hari tengah malam
  • cleanup.sh berjalan setiap Minggu pukul 02:30
  • health-check.sh berjalan setiap empat jam mulai pukul 00:15, dengan stdout dan stderr diarahkan ke file log

Kendala: Pengalihan output (>>, 2>&1) sering kali dihilangkan dalam entri crontab. Tanpanya, cron mencoba mengirim output melalui email ke pengguna lokal via sendmail. Pada server tanpa mail transfer agent, ini membuang semua output secara diam-diam dan membuat debugging hampir mustahil. Selalu alihkan output atau atur MAILTO="" di bagian atas crontab.

2. Menampilkan Cron Job untuk Pengguna Lain

Dengan sudo atau akses root, Anda dapat memeriksa crontab pengguna mana pun:

sudo crontab -l -u john

Ganti john dengan nama pengguna target. Ini secara fungsional identik dengan membaca file spool mentah, tetapi menggunakan mekanisme penguncian yang tepat, sehingga selalu lebih disukai daripada akses file langsung.

3. Menampilkan Semua User Crontab Sekaligus

Pada server multi-pengguna, melakukan iterasi pada setiap akun adalah satu-satunya cara yang andal untuk mendapatkan gambaran lengkap:

for user in $(cut -f1 -d: /etc/passwd); do
    echo "=== Crontab for: $user ==="
    sudo crontab -l -u "$user" 2>/dev/null
done

2>/dev/null menekan pesan “no crontab for” untuk pengguna yang tidak memilikinya, sehingga output tetap bersih.

4. Melihat System-Wide Crontab

cat /etc/crontab

Contoh output pada sistem berbasis Debian:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m  h  dom mon dow  user     command
17  *  *   *   *    root     cd / && run-parts --report /etc/cron.hourly
25  6  *   *   *    root     test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47  6  *   *   7    root     test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52  6  1   *   *    root     test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Perhatikan penjaga test -x /usr/sbin/anacron: jika anacron terinstal, panggilan run-parts ini dilewati dan anacron mengambil alih tanggung jawab untuk job harian, mingguan, dan bulanan. Ini adalah sumber kebingungan yang umum ketika job tampaknya tidak berjalan sesuai jadwal.

5. Menampilkan Job di /etc/cron.d/

ls -la /etc/cron.d/

Untuk memeriksa isi setiap file dalam direktori dalam satu langkah:

grep -v '^#|^$' /etc/cron.d/*

Ini menghapus baris komentar dan baris kosong, hanya menampilkan definisi job yang aktif. Package manager sering menempatkan file di sini — contoh umum termasuk sysstat, penggantian logrotate, dan agen pemantauan.

6. Memeriksa Direktori Cron Spool Secara Langsung

ls -la /var/spool/cron/crontabs/

Pada RHEL, CentOS, dan Fedora, jalurnya adalah /var/spool/cron/ tanpa subdirektori crontabs. Untuk membaca file spool mentah pengguna tertentu:

sudo cat /var/spool/cron/crontabs/username

Penting: Jangan pernah mengedit file spool secara langsung dengan editor teks. Perintah crontab -e menggunakan penguncian file dan memvalidasi sintaks sebelum menginstal file baru. Pengeditan langsung dapat merusak file atau membiarkannya dalam kondisi di mana crond mengabaikannya sepenuhnya.

7. Menampilkan Job Anacron

Jika sistem menggunakan anacron untuk penjadwalan yang tangguh:

cat /etc/anacrontab

Entri anacron menggunakan sintaks yang berbeda — periode dalam hari, penundaan dalam menit, pengenal job, dan perintah — bukan format cron lima field standar.

8. Memeriksa Systemd Timer (Alternatif Modern)

Pada distribusi berbasis systemd, banyak tugas yang secara historis dikelola oleh cron kini ditangani oleh systemd timer. Ini tidak akan muncul dalam daftar crontab mana pun:

systemctl list-timers --all

Audit server yang lengkap harus mencakup pemeriksaan cron maupun systemd timer. Gagal melakukannya adalah salah satu celah paling umum dalam tinjauan keamanan dan kepatuhan.

Audit Cron Lengkap: Perintah Satu Langkah

Untuk audit cepat dan komprehensif dari setiap tugas terjadwal pada sebuah sistem, gabungkan semua sumber:

echo "=== /etc/crontab ===" && cat /etc/crontab
echo "=== /etc/cron.d/ ===" && ls /etc/cron.d/ && grep -rh '' /etc/cron.d/
echo "=== User crontabs ===" && for u in $(cut -d: -f1 /etc/passwd); do sudo crontab -l -u "$u" 2>/dev/null && echo "  ^ user: $u"; done
echo "=== Systemd timers ===" && systemctl list-timers --all --no-pager

Mengedit dan Mengelola Cron Job

Untuk membuka crontab Anda sendiri di editor default sistem ($VISUAL atau $EDITOR, dengan fallback ke vi):

crontab -e

Untuk mengedit crontab pengguna lain sebagai root:

sudo crontab -e -u username

Untuk menghapus semua cron job pengguna saat ini (gunakan dengan hati-hati — ini tidak dapat dibatalkan tanpa backup):

crontab -r

Untuk mencadangkan crontab sebelum melakukan perubahan:

crontab -l > ~/crontab_backup_$(date +%F).txt

Selalu buat backup sebelum mengedit. Tidak ada fitur undo bawaan di crontab -e.

Cron vs. Systemd Timer: Perbandingan Fitur

FiturCronSystemd Timer
Format konfigurasiTeks biasa, sintaks lima fieldFile unit (.timer + .service)
Penjadwalan per-penggunaYa, melalui user crontabYa, melalui instans systemd tingkat pengguna
Penanganan job yang terlewatTidak (job dilewati jika sistem mati)Ya, dengan Persistent=true
LoggingSyslog / mailJournald (dapat dikueri dengan journalctl)
Manajemen dependensiTidak adaGraf dependensi systemd penuh
Penundaan acakTidak native (memerlukan sleep $RANDOM)RandomizedDelaySec=
KompleksitasRendahSedang
KetersediaanSemua sistem Unix/LinuxHanya Linux berbasis systemd

Untuk otomatisasi berbasis waktu yang sederhana pada sistem Unix mana pun — termasuk lingkungan lama dan container — cron tetap menjadi pilihan yang paling portabel dan sederhana secara operasional. Systemd timer lebih unggul ketika Anda membutuhkan pengurutan dependensi, eksekusi job yang terlewat secara andal, atau output log terstruktur.

Perintah Daftar Crontab Umum: Referensi Cepat

TujuanPerintah
Tampilkan job pengguna saat inicrontab -l
Tampilkan job pengguna lainsudo crontab -l -u username
Tampilkan job semua penggunafor u in $(cut -d: -f1 /etc/passwd); do sudo crontab -l -u "$u" 2>/dev/null; done
Lihat system crontabcat /etc/crontab
Tampilkan job cron.dls /etc/cron.d/
Lihat direktori spoolls /var/spool/cron/crontabs/
Lihat job anacroncat /etc/anacrontab
Tampilkan systemd timersystemctl list-timers --all
Edit crontab pengguna saat inicrontab -e
Hapus crontab pengguna saat inicrontab -r

Kendala Nyata dan Kasus Tepi

Variabel lingkungan tidak diwarisi. Cron menjalankan job dalam lingkungan shell minimal. Variabel seperti PATH, HOME, dan LANG yang diatur dalam .bashrc atau .profile Anda tidak tersedia. Selalu gunakan jalur absolut untuk perintah dan biner, atau definisikan PATH secara eksplisit di bagian atas crontab.

Variabel MAILTO mengontrol perutean output. Atur MAILTO="" untuk membuang output, atau MAILTO="admin@example.com" untuk mengarahkannya ke alamat tertentu. Tanpa MTA yang dikonfigurasi, output yang tidak ditangani menyebabkan kegagalan diam-diam.

Izin pada skrip sangat penting. Skrip yang berjalan baik secara interaktif mungkin gagal di bawah cron jika tidak dapat dieksekusi (chmod +x) atau jika mereferensikan file yang tidak dapat dibaca oleh pengguna cron.

Eksekusi job yang tumpang tindih. Jika sebuah job membutuhkan waktu lebih lama dari intervalnya, beberapa instans akan berjalan secara bersamaan. Gunakan file lock atau flock untuk mencegah hal ini:

0 * * * * /usr/bin/flock -n /tmp/myjob.lock /home/user/long-running-job.sh

Kesadaran zona waktu. Cron menggunakan zona waktu sistem secara default. Pada server dengan UTC yang diatur sebagai jam sistem — yang merupakan praktik standar pada VPS Hosting dan Dedicated Server — pastikan waktu terjadwal Anda memperhitungkan selisihnya. Beberapa implementasi cron mendukung variabel CRON_TZ per crontab.

Validasi sintaks crontab. Sebelum menerapkan entri crontab baru di produksi, validasi ekspresi menggunakan alat seperti crontab.guru untuk memastikan jadwal sesuai dengan yang Anda inginkan.

Logging dan Debugging Cron Job

Secara default, cron mencatat eksekusi job ke syslog. Untuk melihat aktivitas cron terbaru:

grep CRON /var/log/syslog | tail -50

Pada sistem berbasis systemd:

journalctl -u cron --since "1 hour ago"

Jika sebuah job tidak berjalan, periksa:

  1. Daemon cron aktif: systemctl status cron (atau crond pada sistem berbasis RHEL)
  2. Skrip dapat dieksekusi dan jalurnya benar
  3. Field waktu valid secara sintaks
  4. Output tidak dibuang secara diam-diam — tambahkan >> /tmp/job.log 2>&1 sementara
  5. Pengguna yang menjalankan job memiliki izin untuk mengeksekusi perintah

Saat mengelola tumpukan otomatisasi yang kompleks pada VPS dengan cPanel, cPanel menyediakan antarmuka grafis Cron Jobs di bagian Advanced, yang menulis langsung ke crontab pengguna. Job yang ditambahkan melalui cPanel sepenuhnya terlihat dengan crontab -l dan berperilaku identik dengan entri yang ditambahkan secara manual.

Matriks Keputusan: Lapisan Cron Mana yang Digunakan

Kasus PenggunaanLapisan yang Direkomendasikan
Otomatisasi pribadi untuk satu penggunaUser crontab (crontab -e)
Tugas pemeliharaan sistem (backup, rotasi log)/etc/cron.d/ atau /etc/crontab
Skrip yang harus berjalan meski jadwal terlewatAnacron (/etc/anacrontab)
Tugas dengan dependensi kompleks atau pengurutan layananSystemd timer
Job tingkat aplikasi yang diterapkan bersama paket/etc/cron.d/<package-name>
Lingkungan terkontainerSupervisor + cron, atau Kubernetes CronJob

Daftar Periksa Poin Penting Praktis

  • Jalankan crontab -l untuk mengaudit job Anda sendiri; gunakan pola loop for untuk mengaudit setiap pengguna di server multi-tenant.
  • Selalu periksa /etc/crontab, /etc/cron.d/, dan systemctl list-timers --allcrontab -l saja memberikan gambaran yang tidak lengkap.
  • Gunakan jalur absolut untuk semua perintah dan biner di dalam entri crontab.
  • Atur MAILTO="" atau alihkan output secara eksplisit untuk mencegah kegagalan diam-diam pada server tanpa MTA.
  • Cadangkan crontab Anda dengan crontab -l > backup.txt sebelum sesi pengeditan apa pun.
  • Gunakan flock untuk mencegah eksekusi bersamaan dari job yang berjalan lama.
  • Pada sistem systemd, periksa journalctl -u cron daripada hanya mengandalkan /var/log/syslog.
  • Validasi ekspresi waktu baru dengan penguji ekspresi cron online sebelum diterapkan ke produksi.
  • Perhatikan UTC vs. zona waktu lokal pada instans cloud dan VPS Hosting.
  • Untuk server Email Hosting atau infrastruktur mana pun di mana job sangat penting, terapkan pemantauan eksternal (misalnya, ping healthcheck) untuk mendeteksi kegagalan cron yang diam-diam.

FAQ

Bagaimana cara menampilkan semua cron job untuk setiap pengguna di server Linux?

Lakukan iterasi pada /etc/passwd dan panggil sudo crontab -l -u <user> untuk setiap akun, dengan menekan error “no crontab” menggunakan 2>/dev/null. Selain itu, periksa /etc/crontab, /etc/cron.d/, dan jalankan systemctl list-timers --all untuk menangkap job tingkat sistem dan yang dikelola systemd.

Mengapa crontab -l tidak menampilkan apa pun meskipun job sedang berjalan?

Job kemungkinan besar didefinisikan di /etc/crontab, sebuah file di dalam /etc/cron.d/, atau sebagai systemd timer — tidak satu pun yang terlihat melalui crontab -l. Perintah tersebut hanya menampilkan crontab pribadi pengguna yang memanggil, yang tersimpan di direktori spool.

Apa perbedaan antara /etc/crontab dan /etc/cron.d/?

Keduanya menggunakan sintaks enam field yang sama (termasuk field nama pengguna) dan dibaca oleh daemon cron sistem. /etc/crontab adalah file monolitik tunggal yang ditujukan untuk administrasi sistem manual. /etc/cron.d/ adalah direktori drop-in tempat paket atau layanan individual menginstal file job mereka sendiri, membuatnya terisolasi dan lebih mudah dikelola atau dihapus secara independen.

Bagaimana cara mencegah cron job menjalankan beberapa instans yang tumpang tindih?

Bungkus perintah dengan flock -n /tmp/lockfile.lock untuk mendapatkan kunci eksklusif non-blocking. Jika instans sebelumnya masih berjalan, pemanggilan baru langsung keluar tanpa mengeksekusi perintah, mencegah persaingan sumber daya dan kerusakan data.

Di mana log cron job disimpan, dan bagaimana cara men-debug job yang tidak dieksekusi?

Pada sebagian besar sistem, cron mencatat ke /var/log/syslog (filter dengan grep CRON) atau melalui journald (journalctl -u cron). Untuk debugging, tambahkan sementara >> /tmp/debug.log 2>&1 ke perintah job untuk menangkap semua output, verifikasi skrip dapat dieksekusi, konfirmasi daemon berjalan dengan systemctl status cron, dan validasi ekspresi waktu secara independen.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai