Halaman

Sabtu, 05 April 2014

Crotab

CRON TAB


Cron adalah utilitas yang memungkinkan untuk secara otomatis menjalankan tugas-tugas di latar belakang dari sistem secara berkala dengan menggunakan daemon cron.  Cron dikendalikan  oleh crontab (tabel cron) file,  sebuah file konfigurasi yang menentukan perintah shell untuk menjalankan secara berkala pada jadwal yang diberikan.  Crontab (tabel cron) adalah file yang berisi sebuah file konfigurasi yang menentukan perintah shell untuk menjalankan secara berkala pada jadwal yang diberikan.

Hal Ini bisa sangat berguna,sebagai contoh, Anda mungkin memiliki direktori sementara pribadi yang ingin Anda dibersihkan sekali sehari untuk menjaga kuota agar tidak terlampaui.  Di sinilah penjadwalan cron berfungsi. Tidak semua sistem memungkinkan untuk Penjadwalan Cron. Anda harus mengecek  sistem Anda untuk melihat apakah Cron tersedia pada sistem Anda. Biasanya File crontab disimpan pada /etc/crontab.
         Tutorial ini akan menjelaskan bagaimana menggunakan Cron dan crontab dan berisi beberapa contoh dasar dari Cron/Crontab  yang diharapkan dapat  menggambarkan bagaimana Cron itu berfungsi.

  1.  Install crontab

Hal ini apabila system anda belum tersedia system Cron  jadi harus diinstall cron-nya, cara install nya adalah :

root@ubuntu# sudo apt-get install cron

  1. Command Crontab
    • root@ubuntu# crontab –e

Command untuk mengedit atau create file Cron

    • root@ubuntu# crontab –l

Command untuk melihat list/ daftar cron

    • root@ubuntu# crontab –r

command untuk menghapus daftar cron

  1. Format penulisan file Crontab


Penjelasan :

5 bintang (*) diatas merepresentasikan bagian2 format waktu yang berbeda, urutannya sebagai berikut :

  •  (* pertama) : menit (isian : 0 – 59)
  •  (* kedua) : jam (isian : 0 – 23)
  •  (* ketiga) : hari dari bulan / tanggal (isian : 1 – 31)
  •  (* keempat) : bulan (isian : 1 – 12)
  •  (* kelima) : hari dari minggu (isian : 0 – 6) –> 0 = minggu

Contoh:

0 0  *  *  *   /etc/init.d/apache2 restart

artinya : Setiap hari pada tengah malam server akan menjalankan perintah restart apache.

59  23  *  *  6  shutdown -r now

artinya : setiap hari sabtu (6 menunjukan hari Sabtu ) pukul 23:59 WIB server akan melakukan perintah shutdown dan restart.

Ada beberapa nilai-nilai standar khusus yang dapat digunakan untuk mengganti ekspresi CRON.

Try
Description
Equivalent To
@yearly
Run once a year, midnight, Jan. 1st
0011*
@monthly
Run once a month, midnight, first of month
001**
@weekly
Run once a week, midnight on Sunday
00**0
@daily
Run once a day, midnight
00***
@hourly
Run once an hour, beginning of hour
0****
@reboot
Run at startup


Cara penggunaanya sebagai berikut :

@daily   /etc/init.d/mysql restart

artinya : Setiap hari pada tengah malam server akan menjalankan perintah restart service MySQL


@weekly   shutdown -r now

artinya  Setiap minggu pada tengah malam server akan menjalankan perintah shutdown dan restart


     Tulisan di bawah ini adalah sebagai sebuah contoh kasus  singkat penggunaan crontab.


       Setiap hari sabtu pada jam 6 sore komputer shutdown (mati). Setelah itu setiap pergantian bulan pada tanggal 1 dengan otomatis akan mengkompres direktori /home menggunakan kompresi bz2 dan file hasil kompresannya di letakkan pada direktori /tmp dengan nama rekapbulanan.tar.bz2

       Serta setiap tanggal 31 Desember setiap tahun akan otomatis melakukan backup direktori /data ke direktori /backup.


menit  /   jam  /  tanggal  /  bulan  /  hari  /  Perintah

*                  *              *               *            *           xxxxx


Berikut adalah contoh penulisannya untuk komputer kita otomatis mati pada pukul 18.00:

menit  /   jam  /  tanggal  /  bulan  /  hari  /  Perintah

=======================================

    *           18           *                *            6       /sbin/init 0

atau

menit  /   jam  /  tanggal  /  bulan  /  hari  /  Perintah

=======================================

    *           18           *                *            6       init 0


Berikut adalah contoh penulisannya untuk perintah setiap pergantian bulan pada tanggal 1 dengan otomatis akan mengkompres direktori /home menggunakan kompresi bz2

menit  /   jam  /  tanggal  /  bulan  /  hari  /  Perintah

=======================================

    0             0            1             *              *         tar -cjf /tmp/bulan.tar.bz2 /home


Berikut adalah contoh penulisannya untuk perintah setiap tanggal 31 Desember setiap tahun akan otomatis melakukan backup direktori /data ke direktori /backup.

menit  /   jam  /  tanggal  /  bulan  /  hari  /  Perintah

=======================================

     0           0           31           12             *      cp -r /data /backup



Perintah Crontab

Perintah crontab adalah sebagai berikut:

crontab -u [nama_user] { -e | -l -r }

Keterangan:

  • -u : user yang menjalankan cron (optional). Jika tidak di set maka di user saat ini yang digunakan
  • -e : edit crontab
  • -l : list atau daftar crontab
  • -r : remove atau menghapus crontab

Contoh penggunaan perintah tersebuta adalah sebagai berikut:

crontab -u bagas -l —> menampilkan list crontab user bagas

crontab -l —> menampilkan list crontab user saat ini

crontab -u bagas —> mengedit crontab user bagas

crontab -r bagas —> menghapus crontab user bagas

       Saat kita menggunakan perintah “crontab -e” (tanpa tandapetik) maka akan muncul editor yang di dalamnya terdapat list perintah terjadwal untu user terkait. Jika Anda belum pernah menambahkan apapun pada crontab file ini biasanya kosong.


Penulisan Crontab

Ketentuan mengedit crontab urutannya adalah sebagai berikut:

m h dom mon dow command


Keterangan:

  • m : minute (menit), diisi 0 – 59 atau * untuk tidak memakai parameter ini
  • h : hour (jam), diisi 0-23 atau * untuk tidak memakai parameter ini
  • dom : day of month (tanggal), diisi 0-31 atau * untuk tidak memakai parameter ini
  • mon : month (bulan), diisi 1-12 atau * untuk tidak memakai parameter ini
  • dow : day of week (hari), diisi 0-6 dimana 0 = minggu, 1= senin, dst atau * untuk tidak memakai parameter ini
  • command (perintah), diisi perintah yang akan dieksekusi. Bisa perintah dasar linux atau bisa juga kumpulan perintah dalam suatu file yang bisa dieksekusi sebagaimana contoh pada artikel saya tentang back up database.
  • Parameter m,h,dom,mon,dow dapat juga digantikan dengan cukup menuliskan @hourly (menjalankan perintah tiap jam), @daily (menjalankan perintah setiap hari jam 00:00),  @weekly (menjalankan perintah tiap hari minggu jam 00:00), atau @monthly (menjalankan perintah tiap awal bulan jam 00:00).
  • Parameter m,h,dom,mon bisa juga dituliskan dengan format “*/n” (tanpa tanda petik) dimana n adalah numeric.
  • Parameter m,h,dom,mon,dow bisa juga ditulis lebih dari 1 dengan separator koma (“,”).


Parameter Waktu

      Untuk lebih memperjelas tulisan ini saya akan coba jelaskan beberapa format parameter waktu yaitu parameter m (minute), h (hour), dom (day of month), mon (month), dan dow (day of week).

Format @waktu. Nilai yang sesuai adalah @hourly, @daily, @weekly, @monthly.

Contoh :

@monthly rm /home/someuser/tmp/*



Contoh Crontab

Dibawah ini adalah beberapa contoh penulisan crontab:

@hourly rm /home/someuser/tmp/*

@daily rm /home/someuser/tmp/*

@weekly rm /home/someuser/tmp/*

@monthly rm /home/someuser/tmp/*

30 0 1 1,6,12 * rm /home/someuser/tmp/*



Disable Email

     Secara default crontab akan mengirimkan email kepada user account yang menjalankan cronjob. Jika Anda tidak menginginkannya tambahkan baris berikut pada akhir baris cronjob:

> /dev/null 2>&1

Contoh:

@monthly rm /home/someuser/tmp/* > /dev/null 2>&1



Membuat Log

      Berikut adalah contoh jika Anda ingin membuat file log dari cronjob yang dijalankan:

@monthly rm /home/someuser/tmp/* > /home/someuser/cronlog/hapus_temporary_file.log



Sebenarnya ada 3 implementasi cron yang dikenal dalam GNU/Linux, yaitu :

  1. Vixie cron

Vixie cron merupakan implementasi penuh fitur berbasis SysV cron. Setiap user memiliki crontab-nya masing-masing dan boleh menentukan variabel lingkungan di dalam crontab tersebut. Tidak seperti varian cron yang lain, cron ini juga
menawarkan dukungan untuk SeLinux dan PAM. Cron ini mendukung arsitektur lebih sedikit dari Dcron, tetapi lebih banyak dari Fcron.

  1. Dillon’s Cron

Dcron diciptakan untuk menjadi implementasi cron yang sederhana, elegan, dan aman. Implementasi ini tidak mengizinkan spesifikasi variabel lingkungan di crontab dan semua cron-job dijalankan dari /bin/sh. Seperti Vixie cron, setiap user boleh memiliki crontab-nya sendiri.

  1. Fcron

Fcron diciptakan untuk menjadi pengganti Vixie cron dan Anacron. Dirancang untuk bekerja pada sistem yang tidak selalu dinyalakan dan memiliki beberapa fitur tambahan. Memiliki penyekat startup job, kendali serialisasi job, kemampuan untuk menetapkan nilai “nice” ke job dan kemampuan untuk menjadwalkan job agar dijalankan ketika sistem startup. Bukalah website fcron untuk info lebih lanjut.

  1. Anacron

Anacron bukanlah merupakan sebuah daemon cron, tetapi merupakan sesuatu yang biasanya bekerja sama dengan daemon cron. Anacron mengeksekusi perintah pada interval yang ditentukan dengan hitungan hari dan tidak menganggap bahwa sistem selalu menyala; ia akan menjalankan tugas-tugas yang terlewatkan ketika sistem sedang dimatikan. Anacron biasanya bergantung pada daemon cron untuk menjalankannya setiap hari.



 Menjadwalkan cron-jobs

Proses pengeditan crontab berbeda untuk setiap paket, tetapi semuanya mendukung kumpulan perintah dasar yang sama: menambahkan dan menggantikan crontab, mengedit crontab, menghapus crontab, dan menampilkan daftar cron-job di cron-tab.

# crontab –help

Perintah diatas berguna untuk menampilkan option-option yang dimiliki oleh perintah crontab. Dalam penggunaannya saya paling sering mengunakan perintah contab -l dan crontab -e untuk melihat dan meng-edit file crontab-nya.

Lihat file crontab yang ada dengan perintah :

# crontab -l

misalkan salah satu contohnya

# update database clamav

15 1 * * * /usr/bin/freshclam -l /var/log/clamav/clam-update.log

Line yang diawali dengan # adalah comment dan tidak dieksekusi oleh cron. Hanya yang tidak di awali dengan tanda # yang dieksekusi. Arti line tersebut adalah “jalankan script /usr/bin/freshclam dan menyimpan log-nya file /var/log/clamav/clam-update.log pada setiap hari pada jam 01:15″. Tanda * artinya jalankan pada setiap waktu menurut periode masing-masing. Berikut penjelasan masing-masing kolom dalam crontab (5 periode waktu, plus satu kolom perintah).

* * * * * program/script yang ingin dijalankan


Arti :

* * * * * hari dalam 1 minggu (0 – 6) (Minggu = 0)

* * * * bulan (1 – 12)

* * * tanggal dalam 1 bulan (1 – 31)

* * jam (0 – 23)

* menit (0 – 59)


Dalam contoh diatas misalnya :

15 1 * * * /usr/bin/freshclam -l /var/log/clamav/clam-update.log

Dapat dilihat bahwa pada jam 1.15 scrip/program /usr/bin/freshclam akan dijalankan setiap harinya (*).


Contoh lain misalkan kita ingin menjalankan script dodol.sh setiap hari Senin jam 6:30 dan meletakkan log nya di file dodol.log, maka isi crontab-nya adalah sbb :

30 6 * * 1 PATH/dodol.sh > PATH/dodol.log


Satu contoh lagi misalkan saya mau buat sebuah script yang akan mengingatkan saya pada jam 5.30 tentang hari ultah saya (tgl 29) dan juga ultah adik saya (tgl 12) pada bulan Juli (7) dan November (11), maka format penulisannya adalah :

30 5 11,29 6,12 * PATH/ultah.sh


Jadi sekarang silahkan atur sesuai kebutuhan, misalkan untuk meng-update antivirus secara periodik, untuk backup file, dll. Dan jangan lupa pastikan daemon cron sudah pasti berjalan pada sistem

# ps -aux | grep cron

More example :

Contoh:
* * * * * perintah => setiap menit
*/10 * * * * perintah => setiap 10 menit
10 * * * * perintah => menit 10 tiap jam
30 18 * * * perintah => setiap jam 18:30
30 08 10 06 * perintah => tanggal 10 bulan juni (06) jam 08:30
00 11,16 * * * perintah => setiap hari jam 11:00 dan 16:00
00 11-16 * * * perintah => setiap hari jam 11:00 s/d 16:00
00 08-16 * * 1-5 perintah => Jam 08:00 s/d 16:00 pada hari 1-5 (senin s/d jum'at)
*/15 6-10 * * * perintah => setiap 15 menit dari jam 6 - 10

@yearly perintah => menit pertama awal tahun (0 0 1 1 *)

@monthly perintah => sama dengan @yearly tapi awal bulan (0 0 1 * *)
@weekly perintah => mingguan  (0 0 * * 0)
@daily perintah => awal hari (0 0 * * *)
@hourly perintah => awal hari (0 * * * *)
@reboot perintah => setiap habis reboot

Tidak ada komentar:

Posting Komentar