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 at. Anacron 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.
# 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.shPada 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 -eSekarang 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 CrontabPesan 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 -rMisalkan 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 startGunakan 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 crontabJika 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 startUntuk menghapusnya, lagi-lagi kita gunakan perintah crontab -r.
[root@localhost ~]# crontab -rKita 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/commandUntuk menjalankan script backup setiap Minggu, Senin, dan Selasa pada jam 2:12 AM, gunakan entry berikut:
12 2 * * 0-2 sh /root/backup.shUntuk menjalankan script pada menit ke-12 setiap jam ke-3 setiap harinya, gunakan entry berikut:
12 */3 * * * sh /root/script.shAgar 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>&1Agar anda tidak menerima email dari cron:
12 */3 * * * sh /root/script.sh > /dev/null 2>&1Berikut 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.