---
title: "Cara Memakai systemd Timer sebagai Pengganti Cron"
description: "systemd timer bisa menggantikan cron dengan log rapi dan jadwal yang tidak terlewat saat server mati. Ini cara membuatnya dan kapan cron masih lebih pas."
url: "https://nivelva.com/insight/cara-memakai-systemd-timer-sebagai-pengganti-cron"
category: "Server \u0026 Infrastruktur"
tags: ["systemd","systemd timer","cron","linux","otomasi"]
author: "Lucas Tan"
published: "2026-11-11T12:48:00+07:00"
updated: "2026-11-11T12:48:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Memakai systemd Timer sebagai Pengganti Cron

> **Jawaban singkat:** systemd timer menjalankan tugas terjadwal lewat pasangan file .service dan .timer. Kelebihannya log otomatis di journalctl, opsi Persistent untuk mengejar jadwal yang terlewat, dan batas CPU atau RAM. Cron tetap lebih ringkas untuk tugas sederhana.

systemd timer adalah unit systemd yang tugasnya menjalankan unit lain, biasanya sebuah service, pada waktu tertentu atau setelah jeda tertentu. Fungsinya sama dengan cron, tapi tugasnya diperlakukan sebagai service penuh: punya log, status, dependensi, dan batas sumber daya.

Pilihan ini tidak menentukan hidup matinya server, tapi menentukan seberapa cepat kamu tahu ketika backup malam tidak jalan. Dengan cron, kegagalan sering baru ketahuan berhari-hari kemudian. Dengan timer, status terakhir dan lognya bisa dicek dengan satu perintah.

## Bagaimana systemd timer bekerja?

### Dua file untuk satu tugas

Satu tugas terjadwal butuh dua file di `/etc/systemd/system/`. File `.service` berisi apa yang dijalankan. File `.timer` berisi kapan menjalankannya. Bila namanya sama, timer otomatis memicu service pasangannya.

Contoh backup database setiap pukul 02.30. File pertama, `backup-db.service`:

```ini
[Unit]
Description=Backup database harian

[Service]
Type=oneshot
User=backup
ExecStart=/usr/local/bin/backup-db.sh
```

File kedua, `backup-db.timer`:

```ini
[Unit]
Description=Jadwal backup database harian

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
RandomizedDelaySec=5min

[Install]
WantedBy=timers.target
```

Aktifkan timer-nya, bukan service-nya:

```bash
sudo systemctl daemon-reload
sudo systemctl enable --now backup-db.timer
```

`Type=oneshot` cocok untuk skrip yang berjalan lalu selesai. Isi skrip backup-nya sendiri bisa mengikuti [cara backup MySQL dan PostgreSQL otomatis](https://nivelva.com/insight/backup-database-otomatis).

### Membaca jadwal OnCalendar

Format `OnCalendar` adalah `HariMinggu Tahun-Bulan-Tanggal Jam:Menit:Detik`, dengan `*` sebagai "apa saja". Ada juga singkatan seperti `hourly`, `daily`, `weekly`, dan `monthly`. Beberapa contoh:

- `Mon..Fri 08:00` untuk setiap hari kerja pukul 08.00.
- `*-*-01 03:00` untuk tanggal 1 setiap bulan pukul 03.00.
- `*:0/15` untuk setiap 15 menit.

Sebelum dipakai, uji jadwalnya dengan:

```bash
systemd-analyze calendar "Mon..Fri 08:00"
```

Perintah ini menampilkan bentuk baku jadwal dan kapan berikutnya akan berjalan. Fitur ini sendiri sudah mencegah banyak salah ketik yang di cron baru ketahuan setelah tugasnya tidak jalan.

Selain jadwal kalender, timer juga bisa berbasis jeda. `OnBootSec=10min` menjalankan tugas 10 menit setelah boot, dan `OnUnitActiveSec=1h` menjalankannya lagi satu jam setelah eksekusi terakhir.

### Memantau dan menguji

```bash
systemctl list-timers
systemctl status backup-db.service
journalctl -u backup-db.service --since today
sudo systemctl start backup-db.service
```

`list-timers` menampilkan kapan setiap timer terakhir dan berikutnya berjalan. Perintah terakhir menjalankan tugas saat itu juga untuk uji coba, tanpa menunggu jadwal.

## Perbandingan systemd timer dan cron

| Aspek | Cron | systemd timer |
|:--|:--|:--|
| Jumlah file per tugas | Satu baris di crontab | Dua file (.service dan .timer) |
| Log | Harus diarahkan sendiri, atau dikirim lewat email bila MAILTO diatur | Otomatis di journalctl |
| Jadwal terlewat saat server mati | Dilewati | Dikejar saat boot bila `Persistent=true` |
| Mencegah tugas berjalan ganda | Perlu `flock` atau trik lain | Service yang masih aktif tidak dijalankan ulang |
| Uji format jadwal | Tidak ada alat bawaan | `systemd-analyze calendar` |
| Batas CPU, RAM, waktu | Tidak ada bawaan | Bisa, lewat opsi service seperti `MemoryMax=` |
| Notifikasi gagal | Email dari cron | Perlu `OnFailure=` ke unit lain |
| Akurasi bawaan | Per menit | Default `AccuracySec=1min`, bisa diperketat |

## Kapan memilih cron, kapan systemd timer

Cron tetap pilihan yang wajar untuk tugas kecil dan cepat, misalnya membersihkan file sementara atau memanggil satu URL. Satu baris crontab lebih cepat dibuat dan dibaca, dan hampir semua admin sudah paham formatnya. Cron juga tersedia di sistem tanpa systemd, termasuk banyak container dan beberapa hosting bersama. Panduan formatnya ada di [cara membuat cron job di Linux](https://nivelva.com/insight/cron-job-linux).

systemd timer lebih masuk akal untuk tugas yang penting dan perlu diaudit: backup, sinkronisasi data, pembaruan sertifikat, atau laporan harian. Log yang tertata, status terakhir yang jelas, kemampuan mengejar jadwal setelah server mati, serta batas sumber daya membuat tugas seperti ini lebih mudah dipercaya. Timer juga cocok bila tugas harus menunggu layanan lain, misalnya baru boleh jalan setelah jaringan atau database aktif, karena bisa memakai `After=` dan `Requires=` seperti service biasa.

Banyak tim memakai keduanya berdampingan. Tidak ada keharusan memindahkan semua crontab sekaligus. Mulailah dari tugas yang paling merugikan bila diam-diam gagal.

> **Jangan lupa variabel lingkungan dan PATH:**
>
> Seperti cron, service yang dijalankan timer tidak membawa variabel lingkungan dari sesi login-mu. Pakai path lengkap di ExecStart dan di dalam skrip, atau tetapkan variabel lewat `Environment=` atau `EnvironmentFile=` di file service.

## Bagaimana memindahkan tugas cron ke timer?

Ambil satu baris crontab, misalnya `30 2 * * * /usr/local/bin/backup-db.sh`. Perintah di bagian akhir menjadi `ExecStart=` di file service, lengkap dengan path. User pemilik crontab menjadi `User=`. Lima kolom waktu diterjemahkan ke `OnCalendar=`, dalam contoh ini `*-*-* 02:30:00`, lalu diperiksa dengan `systemd-analyze calendar`.

Setelah timer aktif dan `systemctl list-timers` menampilkan jadwal berikutnya dengan benar, beri tanda komentar pada baris crontab lama, jangan langsung dihapus. Biarkan beberapa hari sambil memantau `journalctl`. Bila semuanya lancar, baris lama boleh dibuang. Langkah ini mencegah tugas berjalan dua kali atau malah tidak berjalan sama sekali selama masa peralihan.

Kalau kamu belum terbiasa menulis unit systemd, mulai dari [membuat service systemd untuk aplikasi](https://nivelva.com/insight/membuat-service-systemd). Struktur `[Unit]`, `[Service]`, dan `[Install]` di sana sama persis dengan yang dipakai pasangan timer.

## Pertanyaan yang sering diajukan

### Apakah systemd timer bisa dipakai oleh user biasa tanpa root?

Bisa. Simpan file di ~/.config/systemd/user/ lalu kelola dengan systemctl --user. Agar tetap berjalan saat user tidak login, aktifkan lingering dengan loginctl enable-linger nama-user.

### Bagaimana mendapat notifikasi saat tugas gagal?

Tambahkan OnFailure=nama-unit-notifikasi.service di bagian [Unit] file service. Unit notifikasi itu bisa menjalankan skrip pengirim email, pesan chat, atau webhook.

### Apa fungsi RandomizedDelaySec?

Menunda eksekusi secara acak sampai batas yang ditentukan. Berguna agar banyak server tidak menjalankan tugas berat pada detik yang sama, misalnya semua backup ke satu storage pukul 02.30 tepat.

### Bagaimana mematikan sebuah timer?

Jalankan systemctl disable --now nama.timer. Service pasangannya tidak perlu diubah dan masih bisa dijalankan manual bila dibutuhkan.

## Sumber

- <https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html>
- <https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html>
- <https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html>

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/cara-memakai-systemd-timer-sebagai-pengganti-cron
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
