Sabtu, 04 Juni 2011

Cron Tab

sekedar sharing aja gan,..

Apa itu cron?
cron adalah scheduler di unix-like dan merupakan singkatan dari chronograph

cron digunakan untuk mengatur skedul sehingga user dapat menjalankan perintah atau script pada waktu tertentu, biasanya digunakan untuk maintenance atau administrasi.

Apa yang bisa dilakukan cron?



Contoh2 yang bisa dilakukan dengan cron :













backup
bisa backup database, backup data ato backup system
kirim email
seumpama pengen kirim imil ke user jam 10 malem, tinggal diset gaksah balik kantor jam 10 malem :)
reboot server
dsb

di tempat gw, cron hanya digunakan untuk backup database dan tentu saja download scheduler kekekekek karena ga etis donlod file2 gede pas jam sibuk :P

cron merupakan daemon yang hanya perlu dijalankan sekali dan akan berjalan di background process. Pada kebanyakan distro, cron sudah terinstall secara ostosmastis dan di-load di startup, untuk melihatnya ketik


rmx@R3M3X:/etc~$ ps aux | grep cron
root 1302 0.0 0.0 2376 908 ? Ss 18:36 0:00 cron
rmx 6722 0.0 0.0 3328 888 pts/2 S+ 19:35 0:00 grep --color=auto cron

Menggunakan cron

Ada beberapa cara untuk menggunakan cron, kalo diliat di /etc, akan ada beberapa file yang berbau cron


rmx@R3M3X:/etc~$ ls -l | grep cron
drwxr-xr-x 2 root root 4096 2009-10-10 09:19 cron.daily
drwxr-xr-x 2 root root 4096 2009-08-30 22:48 cron.hourly
drwxr-xr-x 2 root root 4096 2009-10-05 10:45 cron.monthly
-rw-r--r-- 1 root root 724 2008-11-12 22:47 crontab
drwxr-xr-x 2 root root 4096 2009-08-30 22:48 cron.weekly

dari hasil ls, ada bberapa file yang berbau cron, apabila kita meletakkan script di dalam direktori cron.daily atau hourly, skedul akan dijalankan sesuai dengan nama direktorinya ..
kalo kita mau bikin skedul sendiri yang ga ngikut direktori2 itu, kita bisa edit lgsg ke file crontab. crontab adalah cron table; adalah sebuah file yang berisi skedul yang berisi job yang musti dilakukan pada waktu tertentu.

Isi dari crontab :


# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#


Syntax crontab :


.---------------- menit
| .------------- jam
| | .---------- hdb
| | | .------- bulan (1 - 12) ato jan,feb,mar,apr ...
| | | | .---- hdm (0 - 6)
| | | | |
* * * * * user cmd

menit perintah akan dijalankan pada menit keberapa, nilai :'0' and '59'
jam perintah akan dijalankan pada jam keberapa, nilai : 0-23, 0 adalah tengah malam
hdb (hari dalam sebulan) perintah akan dijalankan pada hari keberapa dalam sebulan, misal kita mo jalankan perintah pada hari ke 13 setiap bulam , hdb akan mempunyai nilai 13
bulan perintah akan dijalankan pada bulan keberapa dalam setahun, nilai : 1-12 atau nama bulan dalam bhs inggris
hdm perintah akan dijalankan pada hari keberapa dalam seminggu, nilai : 0-6 atau nama hari dalam bhs inggris ((Minggu=0 or 7) ato sun,mon,tue,wed,thu,fri,sat )
user user yang akan menjalankan
cmd perintah yang mau dijalankan

contoh script yang gw masukkin di /etc/crontab


00 23 * * * root mysqldump --user root --password=apaya hrd > /home/detanto/backup_mysql/hrd_`date '+\%Y\%m\%d_\%H\%M\%S'`.sql

Script di atas akan melakukan script backup mysql spesifik ke database hrd tiap jam 11 malem dengan format file :

hrd_`date '+\%Y\%m\%d_\%H\%M\%S'`.sql

di direktori /home/detanto/backup_mysql/

ini gw share script yang menarik, dia nge-backup semua database yang ada di mysql, sebetulnya bisa menggunakan option --all-database, tapi afaik hasilnya jadi satu dalam satu file. Script yang gw buat ini akan membackup satu2 ke dalam file berformat gz .. jd irit :P


#!/bin/bash

dbUSRNM="root" # user database
dbPASSW="qqwwee" # password database
dbHOSTS="localhost" # host database

# path perintah linux
cmMYSQL="$(which mysql)"
cmDUMPS="$(which mysqldump)"
cmGZIP="$(which gzip)"

vrFILE=""
#lokasi backup
vrDESTI="/home/detanto/backup_mysql"
#hostname dari server yg akan dibackup
vrHOSTS="$(hostname)"
#tanggal
vrDATES="$(date +"%Y-%m-%d_%H%M%S")"
#array database yang tidak dibackup
arNOBCK=("mysql" "test" "sample" "information_schema")
#array database yang ada di server
arDBASE="$($cmMYSQL -u $dbUSRNM -h $dbHOSTS -p$dbPASSW -Bse 'show databases')"
#looping semua database yang sudah diisi arraynya di arDBASE
for db in $arDBASE
do
lewat=-1
if [ "$arNOBCK" != "" ];
then
for i in ${arNOBCK[@]}
do
[ "$db" == "$i" ] && lewat=1 || :
done
fi

if [ "$lewat" == "-1" ] ; then
#nama file
vrFILE="$vrDESTI/$db.$vrHOSTS.$vrDATES.gz"
#menjalankan perintah mysqldump dan lgsg di zip ke format gz
$cmDUMPS -u $dbUSRNM -h $dbHOSTS -p$dbPASSW $db | $cmGZIP -9 > $vrFILE
fi
done

simpan script ini, tambahkan permission untuk diexecute trus dipasang deh ke /etc/crontab

Semoga berguna bagi Agan-agan sekalian dan selalu cinta Indonesia :iloveindonesia

0 comments: