Cron emang legendaris dan battle-tested. Tapi, sejak systemd jadi standar baku di hampir semua distro Linux modern (Ubuntu, RHEL, CentOS, Debian), ada satu komponen yang secara perlahan mulai menggeser takhta cron. Dia lebih traceable, lebih terstruktur, dan jauh lebih ke-DevOps-an: Systemd Timer.
Di tulisan kali ini, kita bakal bedah bareng soal konsep .timer di systemd, alasan kenapa kalian harus mulai ninggalin legacy cron, dan gimana cara setup-nya di production.
Konsep Dasar File .timer
Gampangnya, file .timer itu mekanisme native dari systemd buat nge-trigger service lain berdasarkan waktu.
Satu aturan main yang perlu diingat: file .timer ini nggak bisa mengeksekusi script atau biner secara langsung. Tugas dia murni cuma jadi "alarm". Begitu waktunya tiba, dia bakal ngebangunin unit systemd pasangannya (biasanya file .service). Nah, file .service inilah yang nanti bakal kerja mengeksekusi perintah.
Beda sama crontab yang nyampur jadwal dan command di satu baris yang kadang bikin sakit mata, systemd misahin logic-nya jadi dua:
File
.service: Urusan action (skrip apa yang mau jalan, file biner apa yang dieksekusi).File
.timer: Urusan scheduling (kapan si service ini harus jalan).
Secara default, kalau kalian bikin file backup.timer, systemd bakal pinter nyari dan ngejalanin backup.service. Rapi kan?
Kenapa Mesti Repot-repot Pindah dari Cron?
Pasti ada yang mikir, "Kalau cron masih jalan normal, ngapain diganti? If it ain't broke, don't fix it, kan?" Faktanya, tren industri sekarang pelan-pelan mulai ninggalin cron. Distro enterprise modern kayak Amazon Linux 2023, CentOS Stream 9, sampe Arch Linux bahkan udah nggak bundling cron (cronie) secara bawaan. Semua tugas maintenance sistem dari OS sekarang murni di-handle sama systemd timer.
Buat kita yang di DevOps, observabilitas itu harga mati. Dan di sinilah systemd timer unjuk gigi:
Logging-nya Terpusat (Journald): Ini fitur favorit saya. Semua output dan error dari job yang jalan otomatis masuk ke
journalctl. Tinggal ketikjournalctl -u nama-service, log langsung keluar. Nggak usah lagi repot-repot mainan redirect>> /var/log/custom.log 2>&1.Dependency Management: Kita bisa bikin aturan ketat. Misalnya, timer ini cuma boleh jalan kalau service database udah running. (Tinggal set
Requires=atauAfter=di file service-nya).Bebas Tumpang Tindih (Overlapping): Pernah ngalamin skrip cron jalannya kelamaan, terus jadwal berikutnya keburu ke-trigger sampe resource server habis? Systemd nggak gitu. Kalau service dari jadwal sebelumnya belum kelar, jadwal barunya nggak bakal ke-trigger. Aman.
Fitur Catch-up (Persistent): Nah, ini yang cron nggak punya. Misal kalian set jadwal jam 2 pagi, tapi kebetulan server lagi down atau restart jam segitu. Kalau pake cron, jadwal itu ya lewat gitu aja. Kalau pake timer systemd (dengan mode persistent), begitu server up, systemd bakal nyadar ada jadwal yang bolong dan langsung nge-run saat itu juga.
Dua Tipe Timer di Systemd
Waktu kalian setup systemd timer, ada dua paradigma waktu yang bisa dipake:
1. Monotonic Timers (Waktu Relatif)
Timer ini nggak peduli jam dinding. Dia jalan berdasarkan event atau waktu yang udah lewat. Opsi yang sering dipake:
OnBootSec=15min: Jalanin 15 menit setelah server beres booting.OnStartupSec=5min: MiripOnBootSec, tapi dihitung dari systemd manager start. Enak dipake kalau kalian nge-run timer di level user (non-root) atau di dalem container.OnUnitActiveSec=1h: Jalanin sejam setelah service target terakhir jalan.OnUnitInactiveSec=2h: Jalanin 2 jam setelah service target beres jalan (stopped). Cocok buat ngasih jeda antar job yang berat.Kapan pakenya? Paling pas buat housekeeping kayak bersihin cache, atau health-check internal.
2. Realtime Timers (Waktu Kalender)
Kalau yang ini feeling-nya persis banget kayak pake cron. Mainannya jam dan tanggal (RTC).
OnCalendar=Mon, *-*-* 02:00:00: Tiap Senin jam 2 pagi.OnCalendar=*-*-* 00:00:00: Tiap tengah malem tiap hari.Kapan pakenya? Jelas buat rotasi log, backup database, atau nge-generate report.
Pro-tip: Nggak usah ngafalin semua sintaksnya. Kalau lagi butuh nyontek kalender, ketik aja
man systemd.timedi terminal. Kalau mau liat parameter timer lengkap, ketikman systemd.timer.
Hands-on: Bikin Systemd Timer Pertama Kita
Biar lebih kebayang, mending kita langsung praktek bikin job backup harian. Semua custom unit systemd biasanya kita taruh di /etc/systemd/system/.
Langkah 1: Siapin Service-nya (Si Eksekutor)
Bikin file /etc/systemd/system/daily-backup.service:
[Unit]
Description=Layanan Pencadangan Data Aplikasi Harian
[Service]
Type=oneshot
# Ganti path ini ke script backup kalian
ExecStart=/usr/local/bin/script-backup.sh
(Catatan: Jangan kasih blok [Install] di file ini, soalnya dia bakal dipanggil dari timer).
💡 Belum terlalu fasih bikin file .service? > Kalau kalian butuh deep-dive cara nge-build file
.servicedari nol buat ngejalanin biner, saya udah nulis panduan lengkapnya di sini: Cara Membuat Service Systemd di Linux.
Langkah 2: Siapin Timer-nya (Si Penjadwal)
Sekarang, bikin pasangannya di /etc/systemd/system/daily-backup.timer:
[Unit]
Description=Timer untuk pencadangan harian tiap jam 1 pagi
# Nggak usah nulis Requires=daily-backup.service di sini.
# Systemd otomatis nge-link-in ke file .service yang namanya sama persis.
[Timer]
# Jalan tiap jam 01:00 pagi
OnCalendar=*-*-* 01:00:00
# Biar kalau server mati pas jadwal, tetep di-eksekusi pas server up lagi
Persistent=true
[Install]
WantedBy=timers.target
Cara Manage dan Cek Status Timer
Kalau file-file di atas udah ready, workflow buat nyalainnya di terminal tuh gini:
Reload systemd daemon biar ngebaca konfigurasi baru:
sudo systemctl daemon-reloadEnable dan Start timer-nya (Inget ya, yang di-start itu timer-nya, bukan service-nya):
sudo systemctl enable --now daily-backup.timerValidasi! Cek daftar timer yang lagi running di server kalian:
systemctl list-timersOutput-nya bakal rapi kayak gini:
NEXT LEFT LAST PASSED UNIT ACTIVATES Sat 2026-07-11 01:00:00 WIB 5h 56min left Fri 2026-07-10 01:00:15 WIB 18h ago daily-backup.timer daily-backup.service Sat 2026-07-11 06:45:00 WIB 11h left Fri 2026-07-10 07:15:33 WIB 11h ago apt-daily-upgrade.timer apt-daily-upgrade.service 2 timers listed. Pass --all to see loaded but inactive timers, too.Lihat kolom NEXT dan LEFT, cakep kan? Jauh lebih enak dilihat daripada nebak-nebak jadwal
crontab -l.
Wrapping Up
Pindah dari habit cron ke systemd timer emang butuh sedikit effort di awal karena kita harus maintain dua file. Tapi percaya deh, buat environment production, benefit yang dikasih—terutama urusan logging via journalctl dan pencegahan sistem macet karena job overlapping—jauh lebih berharga daripada overhead bikin filenya.
Gimana, udah siap migrasiin cron jobs legacy kalian ke systemd timer? Kalau nemu error atau punya trik custom systemd sendiri, ramaikan di kolom komentar di bawah ya! Cheers!
Tidak ada komentar:
Posting Komentar