Cron adalah daemon penjadwalan yang menjalankan tugas dengan interval yang ditentukan. Tugas-tugas ini disebut cron jobs dan sebagian besar digunakan untuk mengotomatisasi pemeliharaan atau administrasi sistem.

Misalnya, Anda dapat mengatur cron job untuk membuat backup database atau data dan file Anda, update sistem dengan tambalan keamanan terbaru, memeriksa penggunaan ruang disk, mengirim email dan banyak lagi. Beberapa aplikasi, seperti Drupal atau Magento membutuhkan cron jobs untuk melakukan fungsi tertentu.

Anda dapat menjadwalkan cron jobs untuk dijalankan berdasarkan menit, jam, hari dalam bulan, tahun, hari dalam seminggu atau kombinasi dari semuanya.

Di harapkan Anda membuka Linux Terminal dan mempraktekkan apa yang ada di panduan ini agar anda lebih memahami. Namun kami sarankan untuk menggunakan virtual machine (vmware atau virtualbox) agar tidak mengacaukan sistem yang berjalan.

Apa itu File Crontab

Crontab (cron table) adalah file teks yang menentukan jadwal cron jobs. Ada dua jenis file crontab. File crontab seluruh sistem dan file crontab pengguna individu.

File crontab pengguna disimpan dengan nama pengguna dan lokasinya bervariasi menurut sistem operasi. Dalam sistem berbasis Red Hat seperti CentOS, file crontab disimpan di direktori /var/spool/cron sementara pada file Debian dan Ubuntu disimpan di direktori var/spool/cron/crontabs

Meskipun Anda dapat mengedit file crontab pengguna secara manual, disarankan untuk mengedit crontab menggunakan perintah crontab melalui baris perintah.

/etc/crontab dan file di dalam direktori /etc/cron.d adalah file crontab di seluruh sistem yang hanya dapat diedit oleh administrator sistem.

Di sebagian besar distribusi Linux, Anda juga dapat meletakkan skrip di dalam direktori /etc/cron.{hourly,daily,weekly,monthly} dan skrip akan dieksekusi setiap jam/harian/mingguan/bulanan.

Sintaks dan Operator Crontab

Setiap baris dalam file crontab pengguna berisi enam bidang yang dipisahkan oleh spasi diikuti oleh perintah yang akan dijalankan.

* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Hari dalam satu minggu (0 - 7) (Minggu=0 atau 7)
| | | ------- Bulan (1 - 12)
| | --------- Tanggal (1 - 31)
| ----------- Jam (0 - 23)
------------- Menit (0 - 59)

Lima bidang pertama dapat berisi satu atau lebih nilai, dipisahkan oleh koma atau rentang nilai yang dipisahkan oleh tanda hubung.

  • * – Operator tanda bintang berarti nilai apa pun atau selalu. Jika Anda memiliki simbol tanda bintang di bidang Jam, itu berarti tugas akan dilakukan setiap jam.
  • , – Operator koma memungkinkan Anda menentukan daftar nilai untuk pengulangan. Misalnya, jika Anda memiliki 1,3,5 di bidang Jam, tugas akan berjalan pada jam 1 pagi, 3 pagi dan 5 pagi (format jam 24 jam).
  • - Operator tanda hubung memungkinkan Anda untuk menentukan rentang nilai. Jika Anda memiliki 1-5 di bidang Day of week, tugas akan berjalan setiap hari kerja (Dari Senin hingga Jumat).
  • / -Operasi garis miring memungkinkan Anda untuk menentukan nilai yang akan diulang selama interval tertentu di antara mereka. Misalnya, jika Anda memiliki * / 4 di bidang Jam, maka tindakan akan dilakukan setiap empat jam. Ini sama dengan menentukan 0,4,8,12,16,20. Alih-alih tanda bintang sebelum operator garis miring, Anda juga dapat menggunakan rentang nilai, 1-30/10 artinya sama dengan 1,11,21.

File Crontab di seluruh sistem

Sintaksis file crontab seluruh sistem sedikit berbeda dari crontab pengguna. Crontab berisi bidang wajib tambahan yang digunakan untuk menentukan pengguna mana yang menjalankan cron job.

* * * * * <username> command(s)

Interval waktu crontab

Ada beberapa makro jadwal Cron khusus yang digunakan untuk menentukan interval umum. Anda dapat menggunakan pintasan ini sebagai pengganti spesifikasi tanggal lima kolom.

  • @yearly (atau @annually) – Jalankan tugas yang ditentukan setahun sekali pada tengah malam (12:00 pagi) tanggal 1 Januari. Setara dengan 0 0 1 1 *
  • @monthly – Jalankan tugas yang ditentukan sebulan sekali pada tengah malam pada hari pertama bulan itu. Setara dengan 0 0 1 * *
  • @weekly – Jalankan tugas yang ditentukan tanpa seminggu seminggu di tengah malam pada hari Minggu. Setara dengan 0 0 * * 0
  • @daily – Jalankan tugas yang ditentukan sekali sehari pada tengah malam. Setara dengan 0 0 * * *
  • @hourly – Jalankan tugas yang ditentukan setiap satu jam sekali. Setara dengan 0 * * * *
  • @reboot– Jalankan tugas yang ditentukan pada saat startup sistem (waktu boot).

Perintah Crontab di Linux

Perintah crontab memungkinkan Anda untuk menginstal atau membuka file crontab untuk diedit. Anda dapat menggunakan perintah crontab untuk melihat, menambah, menghapus, atau memodifikasi pekerjaan cron menggunakan opsi berikut:

  • crontab -e – Edit file crontab, atau buat file jika belum ada.
  • crontab -l – Menampilkan konten file crontab.
  • crontab -r– Hapus file crontab Anda saat ini.
  • crontab -i – Hapus file crontab Anda saat ini dengan prompt sebelum dihapus.
  • crontab -u <username> – Edit file penggunaan crontab lainnya. Membutuhkan hak administrator sistem.

Perintah crontab membuka file crontab menggunakan editor yang ditentukan oleh variable environment VISUAL atau EDITOR.

Variabel Environment Penggunaan Crontab

Daemon cron secara otomatis menetapkan beberapa variabel environment .

  • Path default diatur ke PATH=/usr/bin:/bin. Jika perintah yang Anda panggil ada di jalur yang ditentukan cron, Anda bisa menggunakan jalur absolut ke perintah atau mengubah variabel $PATH cron. Anda tidak dapat menambahkan secara implisit :$PATH seperti yang akan Anda lakukan dengan skrip normal.
  • Shell default diatur ke /bin/sh. Anda dapat mengatur shell yang berbeda dengan mengubah variabel SHELL.
  • Cron menjalankan perintah dari direktori home pengguna. Variabel HOME dapat ditimpa oleh pengaturan di crontab.
  • Notifikasi email dikirim ke pemilik crontab. Untuk menimpa perilaku default, Anda dapat menggunakan variabel environment MAILTO dengan daftar (dipisahkan koma) dari semua alamat email yang ingin Anda terima notifikasi email. Jika MAILTO didefinisikan tetapi kosong (MAILTO=""), maka tidak ada email yang dikirim.

Pembatasan Crontab

Administrator sistem dapat mengontrol pengguna mana yang memiliki akses ke perintah crontab dengan menggunakan file /etc/cron.deny dan /etc/cron.allow. File-file tersebut terdiri dari daftar nama pengguna, satu nama pengguna per baris.

File /etc/cron.deny tersedia Secara default, namun file tersebut kosong, yang berarti bahwa semua pengguna dapat menggunakan perintah crontab. Jika Anda ingin menolak akses ke perintah crontab ke pengguna tertentu, tambahkan nama pengguna ke file cron.deny.

Jika file/etc/cron.allow ada, hanya pengguna yang terdaftar dalam file ini yang dapat menggunakan perintah crontab. Jika tidak ada file cron.allow, hanya pengguna dengan hak administratif (root atau pengguna dengan hak sudo) yang dapat menggunakan perintah crontab.

Contoh dan Format Cron Jobs

Di bawah ini adalah beberapa contoh cron jobs yang akan menunjukkan kepada Anda bagaimana menjadwalkan tugas untuk dijalankan pada periode waktu yang berbeda.

  • Jalankan perintah pada pukul 15:00 setiap hari dari Senin hingga Jumat:
    0 15 * * 1-5 perintah
  • Jalankan skrip setiap 5 menit dan arahkan kembali output standar ke dev null, hanya kesalahan standar yang akan dikirim ke alamat email yang ditentukan:
    MAILTO=[email protected]
    */5 * * * * /path/to/script.sh > /dev/null
  • Jalankan dua perintah setiap hari Monday (Senin) jam 3 sore (gunakan operator && di antara perintah):
    0 15 * * Mon command1 && command2
  • Jalankan skrip PHP setiap 2 menit dan tulis hasilnya ke file:
    */2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log
  • Jalankan skrip setiap hari, setiap jam, pada jam tersebut, dari jam 8 pagi hingga jam 4 sore:
    00 08-16 * * * /jalur/ke/script.sh
  • Jalankan skrip pada hari Senin pertama setiap bulan, pada pukul 7 pagi.
    0 7 1-7 * 1 /path/to/script.sh
  • Jalankan skrip pada pukul 21:15, pada tanggal 1 dan 15 setiap bulan:
    15 9 1,15 * * /path/to/script.sh
  • Tetapkan variabel HOMEPATHSHELL dan MAILTO khusus dan jalankan perintah setiap menit.
    HOME=/opt
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    SHELL=/bin/zsh
    [email protected]
    
    */1 * * * * command

Kesimpulan

Anda telah belajar cara membuat pekerjaan cron dan menjadwalkan tugas pada tanggal dan waktu tertentu. Jika Anda merasa “tersiksa” menggunakan baris perintah, Anda dapat menggunakan versi GUI yang lebih ramah pemula dengan menggunakan webmin untuk debian dan Ubuntu atau webmin untuk CentOS dan RHEL.