Penjadwalan di linux dengan Crontab

Crontab adalah sebuah perintah yang sangat berguna untuk menjalankan tugas-tugas yang terjadwal, sehingga akan mengurangi waktu administrasi. Selain crontab, ada juga perintah lain: anacron dan atAnacron digunakan untuk melakukan penjadwalan suatu perintah untuk komputer yang tidak selalu menyala terus menerus. Anacron menggunakan interval waktu harian, mingguan, dan bulanan. Sedangkan perintah at menjalankan suatu tugas sekali pada satu waktu. Yang paling sering digunakan adalah crontab, karena lebih serba guna, dan dapat diatur untuk berjalan pada sembarang interval waktu.
Kampus kami memiliki beberapa server yang akan menjalankan script untuk melakukan backup data-data penting pada jam-jam sepi, dengan menggunakan cron. Sebagai contoh, script backup akan menghentikan beberapa servis, melakukan rsync dari hot server ke cold server, melakukan backup tape archive standar, dan terakhir menjalankan kembali servis-servis yang dihentikan. Berkat program cron, saya tidak harus berada di sana jam satu malam, saat tugas tersebut dijalankan. Yang harus saya lakukan hanyalah melakukan pengecekan pada peralatan backup dan melihat email setiap pagi untuk memastikan semua berjalan dengan lancar.
Dalam melakukan administrasi sistem, pengaturan cron dilakukan melalui file crontab, yang berisi jadwal waktu dan script yang harus dieksekusi. System Linux memiliki file crontab default, yaitu /etc/crontab, yang akan menjalankan beberapa script pada waktu yang telah ditentukan, misalnya setiap jam, harian, mingguan, dan bulanan. Pertama kali membuka file ini, anda mungkin akan sedikit bingung.

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
[root@localhost ~]#
Bagian pertama mengatur beberapa variabel:
SHELL
Baris pertama menentukan shell yang akan digunakan untuk menjalankan baris perintah. Defaultnya adalah /bin/sh.
PATH
Cron berjalan sebagai proses subshell, sehingga kita harus menentukan path atau menggunakan statement PATH pada crontab. Hal ini karena kita tidak melakukan login pada console pada saat akan menjalankan perintah, sehingga kita tidak mengakses file .bashrc atau .bash_profile, dan kita tidak memiliki environment variable seperti pada saat login sebagai user biasa atau root. Penting untuk diingat bahwa kita tidak bisa menampilkan data output tanpa menggunakan console  –  kita tidak memiliki layar untuk menampilkan data tersebut — sehingga setiap output yang kita butuhkan harus disimpan dalam sebuah file log.
MAILTO
Perintah “MAILTO=” pada baris berikutnya akan mengirimkan hasil dari pekerjaan cron kepada user root. Jika kita mendefinisikan MAILTO namun kosong, maka email dari cron akan diabaikan. Jika MAILTO tidak diset, maka email akan dikirimkan kepada user pemilik crontab.
HOME
Baris berikutnya menentukan direktori home yang akan digunakan oleh cron. Jika tidak diset, maka direktori home yang digunakan adalah yang ada pada file /etc/passwd.
# run-parts
Baris ini sebenarnya hanyalah sebuah komentar, walaupun “run-parts” adalah sebuah perintah yang akan menjalankan semua script atau program pada direktori yang ditentukan.
Bagian yang paling sulit bagi kebanyakan orang adalah bagian pengaturan waktu. Kolom berikutnya setelah pengaturan waktu adalah kolom user yang menentukan user “run-as“, dan perintah “run-parts” akan menjalankan script pada direktori yang ditentukan. Ingat bahwa direktori tersebut dinamai sesuai dengan interval waktu yang sesuai untuk menjalankan direktori tersebut. Kita bisa meletakkan script pada direktori yang kita inginkan, sehingga script tersebut akan dijalankan pada waktu yang telah ditentukan pada bagian pengaturan waktu. Namun sebenarnya hal ini bukanlah ide yang bagus, sebab kita bisa saja lupa bahwa ada script di dalam direktori tersebut. Sebaiknya kita mengedit file crontab dan mengisikan tugas-tugas cron kita sendiri, karena dengan cara ini akan lebih mudah untuk mendapatkan daftar tugas-tugas cron dan melakukan pengaturan lebih lanjut melalui crontab. Ingat bahwa ini adalah file crontab milik sistem, yang digunakan untuk menjalankan script dan program untuk maintenance sistem. Sebuah file crontab milik user akan sedikit berbeda, jadi sebaiknya anda tidak menyalinnya.
# Time User Command Path

01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Dasar-dasar Crontab

Terdapat dua buah file yang menentukan user mana yang bisa menggunakan crontab: /etc/cron.allow dan /etc/cron.deny. Biasanya, hanya ada file cron.deny pada sistem, dan jika file ini ada, dan terdapat nama user di dalamnya (satu user per baris), maka user tersebut tidak diperbolehkan menggunakan perintah crontab. Jika terdapat file cron.allow, maka hanya user yang namanya terdapat pada file ini yang diperbolehkan menggunakan perintah crontab.
Pada file crontab, terdapat enam field untuk setiap entry, dan masing-masing field dipisahkan oleh spasi atau tab.
  • Lima field pertama menentukan kapan perintah akan dijalankan.
  • Field ke-enam adalah perintah yang akan dijalankan.
 Minute - 0-59.
 Hour - 0-23 24-hour format.
 Day - 1-31 Day of the month.
 Month - 1-12 Month of the year.
 Weekday - 0-6 Day of the week. 0 refers to Sunday.
Pada file crontab, akan tampak seperti ini:
# min(0-59) hours(0-23) day(1-31) month(1-12) dow(0-6) command
 34 2 * * * sh /root/backup.sh
Pada contoh tersebut, perintah “sh /root/backup.sh” akan dijalankan pada jam 2:34 AM setiap hari.
Tanda bintang pada contoh tersebut berarti ‘semua waktu‘. Tanda bintang pada kolom ‘menit’ berarti “jalankan setiap menit”.

Percobaan

Sekarang mari kita mencoba membuat sebuah tugas untuk cron. Perintah yang harus kita jalankan adalah crontab -e, yang akan membuka teks editor vi untuk melakukan pengaturan tugas-tugas cron.
[root@localhost ~]# crontab -e
Sekarang masukkan baris berikut ini:
* * * * * /usr/bin/wall "Hello From Crontab"
Setelah disimpan, kita akan melihat keluaran berikut ini:
crontab: installing new crontab
[root@localhost ~]#
Dalam beberapa saat, anda akan melihat pesan berikut ini:
Broadcast message from root (Thu Apr 3 14:52:01 2008):

Hello From Crontab
Pesan ini akan muncul setiap menit, karena kita meletakkan tanda bintang pada semua field waktu. Jika kita tidak menghapus file crontab ini, maka kita akan mendapatkan pesan ini setiap menit selama hidup kita. Hal ini sekaligus menunjukkan apa akibatnya jika kita melakukan suatu kesalahan dengan crontab. Kita harus menjalankan perintah crontab -r untuk menghapus entry di atas.
[root@localhost ~]# crontab -r
Misalkan di masa mendatang kita harus menjalankan web server Apache httpd, cron juga bisa diandalkan. Pertama, kita akan mengecek apakah httpd sedang tidak berjalan. Lalu, kita jalankan perintah date untuk mendapatkan waktu saat ini, sehingga kita bisa mengatur crontab untuk menjalankannya di masa datang.
[root@localhost ~]# service httpd status
httpd is stopped
[root@localhost ~]#
[root@localhost ~]# date
Thu Apr 3 15:45:32 MST 2008
[root@localhost ~]#
Kita dapat dengan mudah menghitung waktu 10 menit dari sekarang. Jalankan perintah crontab -e, dan tulislah file crontab dengan mengingat format waktunya.
# min(0-59) hours(0-23) day(1-31) month(1-12) dow(0-6) command

 55 15 * * * /sbin/service httpd start
Gunakan saja tanda bintang untuk hari, bulan dan hari dalam seminggu, dan gunakan satu spasi saja, sebab beberapa distribusi Linux tidak mengijinkan anda menggunakan lebih dari satu spasi.
55 15 * * * /sbin/service httpd start
[root@localhost ~]# crontab -e
crontab: Installing new crontab
Jika anda melakukan kesalahan, crontab akan memberitahu anda saat anda menutup editor. Dengan asumsi tidak ada kesalahan, web server Apache akan berjalan kurang dari sepuluh menit dari sekarang. Anda bisa menggunakan perintah crontab -l untuk melihat daftar tugas-tugas dalam file crontab.
[root@localhost ~]# crontab -l
55 15 * * * /sbin/service httpd start
Untuk menghapusnya, lagi-lagi kita gunakan perintah crontab -r.
[root@localhost ~]# crontab -r
Kita bisa melakukan banyak kombinasi pengaturan waktu. Ada cara lain untuk pengaturan waktu: “20-27″ menunjukkan range; “3,4,7,8″ artinya hanya interval tersebut untuk suatu pilihan, dan */5 artinya setiap interval ke lima. Fitur lainnya, setelah cron menyelesaikan suatu tugas, kita akan mendapatkan email berisi keluaran dari perintah yang dijalankan.

Contoh lainnya

Entry crontab berikut ini akan menjalankan perintah setiap menit ke 15 dan 30 setiap jam, selama bulan Mei:
15,30 * * 5 * /usr/bin/command
Untuk menjalankan script backup setiap Minggu, Senin, dan Selasa pada jam 2:12 AM, gunakan entry berikut:
12 2 * * 0-2 sh /root/backup.sh
Untuk menjalankan script pada menit ke-12 setiap jam ke-3 setiap harinya, gunakan entry berikut:
12 */3 * * * sh /root/script.sh
Agar cron menuliskan keluaran dari suatu perintah ke dalam sebuah file log, anda bisa menambahkan entry berikut:
12 */3 * * * sh /root/script.sh >> /root/script.log 2>&1
Agar anda tidak menerima email dari cron:
12 */3 * * * sh /root/script.sh > /dev/null 2>&1
Berikut ini contoh email yang akan anda terima dari keluaran cron:
From  root at localhost.localdomain Thu Apr 3 12:08:01 2008
Date: Thu, 3 Apr 2008 12:08:01 -0700
From:  root at localhost.localdomain (Cron Daemon)
To:  root at localhost.localdomain
Subject: Cron <root@localhost> sh /root/s.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>

test

Beberapa tips dalam menggunakan cron:

  • Selalu gunakan path absolut.
  • Jika anda tidak yakin apakah tugas-tugas cron telah selesai, periksalah email anda.
  • Hapus entry cron yang sudah tidak diperlukan lagi.
  • Pastikan crond berjalan.

Perintah-perintah:

crontab -e - Mengedit file crontab yang sudah ada, atau membuat file baru.
crontab -l - Menampilkan isi file crontab.
crontab -r - Menghapus file crontab.
crontab -u - Mengedit crontab milik user.

Facebook Twitter RSS