Neuronworks Blog, WebMethods, Oracle, Bea, Java Dev2Dev, Arch2Arch Neuronworks Make IT Easy, Let's Play the Game » Linux

Archive

Archive for the ‘Linux’ Category

Tahun Depan Linux Lebih Banyak Dipakai dari Windows

January 24th, 2009

Untuk pengguna yang sering memprediksi datangnya “year of the Linux desktop” — waktunya tampaknya sudah semakin dekat. Jim Zemlin, direktur Linux Foundation mengatakan bahwa tahun depan Linux berkemungkinan digunakan di lebih banyak desktop dibandingkan Windows atau Mac. Yang menjadi katalis pertumbuhan pesat ini adalah fast boot.

Minggu lalu Matt Richtell dari New York Times mempublikasikan sebuah artikel tentang bagaimana konsumen semakin meminta boot yang cepat pada komputer (baca terjemahannya di udaramaya). Artikel tersebut mengatakan bagaimana HP, Dell, Lenovo, Asus maupun berbagai vendor PC lainnya telah mulai merancang komputer yang memberikan pengguna akses ke fungsi-fungsi dasar seperti email dan browser dalam kurang dari 30 detik — dimungkinkan oleh Linux.

Kemudian Ashlee Vance, yang juga bekerja di New York Times menulis sebuah artikel susulan yang mendeskripsikan bagaimana tren ini semakin menguat, mengatakan bahwa “dalam beberapa bulan depan, teknologi instant on akan memasuki segmen mainstream. Di bawah ini adalah beberapa bocoran tentang apa yang akan datang:”
DeviceVM: perusahaan baru Silicon Valley ini telah menjadi pimpinan dari semua vendor aplikasi instant on. HP, Lenovo dan Asus semuanya menggunakan produk Splashtop besutan Device VM yang sudah dimodifikasi. Melalui Splashtop, mereka memberikan akses cepat ke browser, aplikasi foto, instant messaing maupun VoIP kepada pengguna. Vendor-vendor PC terbesar dunia berencana untuk mengemas Splashtop ke dalam laptop. Asus bahkan sudah berkomitmen untuk mengemas Splashtop ke dalam semua motherboard.
HP: hari ini Anda sudah dapat membeli Envy yang datang dengan aplikasi “Instant On Solution,” yang merupakan Splashtop yang sudah dimodifikasi. Dalam beberapa bulan ke depan, HP berencana untuk mengemas solusi yang sama ke berbagai laptop — jumlah pastinya tidak diumumkan.
Lenovo: mulai awal tahun depan, Lenovo akan mengemas Splashtop ke dalam berbagai produk laptop.
Phoenix Technologies: vendor perangkat lunak ini tengah mengembangkan aplikasi bernama HyperSpace yang memungkinkan pengguna untuk terlebih dahulu menggunakan sistem berbasis Linux sementara menunggu boot Windows selesai di latar belakang. Pengguna kemudian dapat secara bergantian menggunakan Linux maupun Windows sesuai kemauan. Aplikasi ini akan tersedia untuk publik mulai bulan Januari tahun depan dengan biaya berbasis subskripsi.
Apa artinya tren ini untuk Linux? Yang pertama adalah fakta bahwa Linux semakin berperan penting dalam pengalaman pemakaian pengguna. Linux tidak saja akan memperkuat aplikasi-aplikasi fast boot, tetapi juga sudah ada pengembang yang mendemonstrasikan sistem Linux penuh yang dapat selesai boot dalam lima detik.

Pada akhir tahun depan, kita mungkin akan melihat keadaan di mana Linux dikemas ke dalam hampir semua notebook tidak peduli apakah komputer tersebut mengoperasikan Windows. Dan ini masih belum menghitung segmen netbook, mobile internet device (MID) dan ponsel Linux yang berpotensi besar — memungkinkan datangnya “year of the Linux desktop,” walaupun mungkin tidak dalam bentuk yang diduga banyak orang beberapa tahun lalu.

Linux

SqlPlus dengan History di Linux

January 6th, 2009

Paling frustasi kalau pake sqlplus, sudah ketik syntax panjang-panjang, waktu dieksekusi ada yang salah, ngetik lagi deh dari awal. Soalnya tidak ada history buat command yang sudah dijalankan. Tidak bisa diedit lagi command yang sudah kita ketik. Solusinya cuma di backspace. :D
Tapi tenang saja, ada solusinya agar sqlplus juga punya kemampuan buat menyimpan history command, seperti Shell Bash di Linux. Yang kita perlukan hanyalah sebuah aplikasi yang bernama rlwrap.
Install dulu rlwrap untuk operating system anda. Dalam contoh ini yang digunakan adalah openSUSE 10.3 yang bisa didapatkan dari http://download.opensuse.org/repositories/openSUSE:/10.3/standard/i586/rlwrap-0.28-27.i586.rpm.
Setelah diinstal kita tinggal menjalankan perintah rlwrap dengan parameternya yaitu sqlplus:

oracle@NeuronServer:~> rlwrap sqlplus

Sqlplus yang terbuka akan memiliki kemampuan menyimpan history command dan line editing sederhana. Gunakan tombol panah atas dan bawah untuk mengakses perintah yang sudah kita jalankan. Kita juga bisa mengedit perintah itu dengan menggeser kursor menggunakan tombol panah kanan dan kiri. Agar konfigurasi rlwrap tadi terus dijalankan setiap login kita gunakan saja fungsi alias dari shell agar setiap kali sqlplus dijalankan yang dipanggil adalah perintah rlwrap dengan parameter sqplus-nya. Buka file .bash_profile yang ada di direktori home user oracle atau user yang dapat menjalankan perintah sqlplus:

oracle@NeuronServer:~> vi ~/.bash_profile

dan tambahkan baris berikut:

alias sqlplus='rlwrap sqlplus'

Cara lainnya dengan menjalankan perintah echo yang menambahkan baris diatas langsung di baris terakhir file .bash_profile:

oracle@NeuronServer:~> echo "alias sqlplus='rlwrap sqlplus'" >> ~/.bash_profile

Semoga bermanfaat and have a lot of fun!

Linux, Oracle , , , , , ,

Membackup Schema Oracle Secara Otomatis

January 5th, 2009

The Intro

Sebelumnya kita sudah mencoba membackup schema oracle menggunakan exp. Kita bisa memanfaatkannya untuk membuat sebuah sistem penjadwalan yang secara otomatis membackup schema tersebut pada waktu yang telah ditentukan. Tool yang digunakan selain Shell dan exp juga crontab. Crontab merupakan aplikasi penjadwalan di mesin Unix dan Linux. Crontab bekerja sebagai daemon atau service cron yang setiap waktu akan mengecek apakah ada job atau tugas yang harus dilakukan pada waktu itu. Crontab menyimpan entri untuk setiap penjadwalan seperti ini:

* * * * * /home/alam/someScript.sh

Kolom pertama menunjukan menit dimana entri tersebut akan dijalankan. Kolom kedua untuk jam, kolom ketiga untuk tanggal, kolom keempat untuk bulan, kolom kelima untuk untuk hari, dan kolom terakhir menunjukan perintah apa yang akan dijalankan. Dari contoh diatas berarti setiap menit, setiap hari, setiap bulan cron akan menjalankan script tersebut.
Pertama-tama kita buat dulu script sederhana, train-backup.sh yang berfungsi untuk membackup schema tersebut. Script tersebut akan membackup schema-nya di directory yang sudah ditentukan dengan nama file yang berbeda berdasarkan kapan schema tersebut dibackup.

The Script

#!/bin/sh
#script to backup oracle schema based on time when it saved
#initializing variables
export PATH=$PATH:/app/oracle/product/10.2/bin
export ORACLE_BASE=/app/oracle
export ORACLE_HOME=/app/oracle/product/10.2
export ORACLE_SID=neuron
export BASEDIR=$HOME/train-backup
export DTM=`date +%Y%m%d-%H%M%S`
export UNAME=train
export PASSWD=train
export FILENAME=train
 
# command section
cd $BASEDIR
exp $UNAME/$PASSWD file=$FILENAME-$DTM.dmp
 
exit

Jangan lupa beri execute permission dengan:

alam@NeuronServer:~> chmod +x train-backup.sh

Script-nya cukup sederhana kan? Yang perlu dilakukan hanyalah inisialisasi variabel:

export PATH=$PATH:/app/oracle/product/10.2/bin
export ORACLE_BASE=/app/oracle
export ORACLE_HOME=/app/oracle/product/10.2
export ORACLE_SID=neuron
export BASEDIR=$HOME/train-backup
export DTM=`date +%Y%m%d-%H%M%S`
export UNAME=train
export PASSWD=train
export FILENAME=train

dan perintah backup itu sendiri:

cd $BASEDIR
exp $UNAME/$PASSWD file=$FILENAME-$DTM.dmp

Untuk sedikit memahami dasar dari shell scripting silakan lihat kembali postingan sebelumnya.
Yang mungkin perlu diperhatikan adalah variabel DTM yang akan menyimpan format waktu untuk digunakan di nama filenya. Variabel DTM menyimpan hasil output dari perintah date yang akan menampilkan waktu saat itu dengan format YYYYMMDD-HH:MI:SS. Untuk lebih jelasnya coba jalankan perintah date tersebut di command line:

alam@NeuronServer:~> date +%Y%m%d-%H%M%S
20090105-201620

Variabel ini akan kita tambahkan di nama file backup schema-nya untuk membedakan satu file dengan yang lain.

The Cron

Sekarang kita masuk ke bagian cron-nya sendiri. Kita tentukan kapan saja backup akan dilakukan. Misal kita ingin backup dilakukan setiap jam 12 malam setiap hari Senin dan Jum’at. Entri crontab-nya seperti ini:

* 00 * * 1,5 /home/alam/train-backup.sh

Untuk memasukkan entri diatas gunakan perintah crontab -e. Editor vi akan terbuka. Untuk masuk ke mode insert tekan tombol i. Ketikkan atau paste entri yang tadi kita buat. Untuk menyimpannya tekan tombol Esc, dilanjutkan dengan tombol :, dilanjutkan dengan tombol x, yang berarti menyimpan sekaligus keluar dari vi.
Untuk melihat apakah penjadwalan tersebut sudah masuk gunakan perintah crontab -l:

alam@NeuronServer:~> crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.XXXXLhlmgJ installed on Mon Jan  5 20:28:21 2009)
# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
* 00 * * 1,5 /home/alam/train-backup.sh

The… End?

Selesai! Untuk melihat berhasil atau tidaknya kita lihat lagi besok apakah file backup schema-nya sudah ada atau tidak. :)

The Update

Coba kita lihat hasilnya:

alam@NeuronServer:~> ll train-backup
total 0

Lho kok tidak ada? Ayo kita cek script-nya dengan cara dijalankan langsung:

alam@NeuronServer:~> ./train-backup.sh 
./train-backup.sh: line 16: exp: command not found

Hm? PATH-nya kan sudah masuk mestinya? Coba kita export dan tes lagi satu-satu variabelnya:

alam@NeuronServer:~> export ORACLE_BASE=/app/oracle
alam@NeuronServer:~> cd $ORACLE_BASE
alam@NeuronServer:/app/oracle> export ORACLE_HOME=/app/oracle/product/10.2
alam@NeuronServer:/app/oracle> cd $ORACLE_HOME
-bash: cd: /app/oracle/product/10.2: Permission denied

Ini dia masalahnya. User alam tidak punya permission untuk masuk ke direktori /app/oracle/product:

alam@NeuronServer:/app/oracle> ll /app/oracle/
total 20
drwxr-x--- 3 oracle oinstall 4096 2008-11-22 17:08 admin
drwxr-x--- 3 oracle oinstall 4096 2008-11-22 17:09 flash_recovery_area
drwxr-x--- 3 oracle oinstall 4096 2008-11-22 17:08 oradata
drwxrwx--- 6 oracle oinstall 4096 2008-11-22 17:07 oraInventory
drwxrwx--- 3 oracle oinstall 4096 2008-11-22 00:07 product

Jadi bagaimana solusinya? Kita jalankan script tersebut sebagai user yang punya permission untuk mengakses direktori tersebut, yaitu oracle:

oracle@NeuronServer:~> mkdir train-backup
oracle@NeuronServer:~> /home/alam/train-backup.sh 
 
Export: Release 10.2.0.1.0 - Production on Tue Jan 6 14:59:42 2009
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
 
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses WE8ISO8859P1 character set (possible charset conversion)
. exporting pre-schema procedural objects and actions
. exporting foreign function library names for user TRAIN 
. exporting PUBLIC type synonyms
. exporting private type synonyms
. exporting object type definitions for user TRAIN 
About to export TRAIN's objects ...
. exporting database links
. exporting sequence numbers
. exporting cluster definitions
. about to export TRAIN's tables via Conventional Path ...
. . exporting table                          TRAIN          2 rows exported
EXP-00091: Exporting questionable statistics.
. exporting synonyms
. exporting views
. exporting stored procedures
. exporting operators
. exporting referential integrity constraints
. exporting triggers
. exporting indextypes
. exporting bitmap, functional and extensible indexes
. exporting posttables actions
. exporting materialized views
. exporting snapshot logs
. exporting job queues
. exporting refresh groups and children
. exporting dimensions
. exporting post-schema procedural objects and actions
. exporting statistics
Export terminated successfully with warnings.
oracle@NeuronServer:~> ll train-backup
total 16
-rw-r--r-- 1 oracle oinstall 16384 2009-01-06 14:59 train-20090106-145942.dmp

Jadi masukkan cron job-nya yang tadi untuk user oracle dengan crontab -e juga.
Dan crontab yang di user alam dihapus saja:

alam@NeuronServer:~> crontab -r
alam@NeuronServer:~> crontab -l
no crontab for alam

Sekarang sudah pasti berhasil.

Semoga bermanfaat and have a lot of fun!

Linux, Oracle , , , , ,

Mengetahui Ukuran File dan Direktori

December 29th, 2008

Kita bisa menggunakan perintah du untuk mengetahui ukuran sebuah file seperti ini:

alam@NeuronServer:~> du linux-2.6.28.tar.bz2
51488   linux-2.6.28.tar.bz2

Nilai yang ditampilkan secara default dalam ukuran Kilobyte. Berarti ukuran source kernel diatas adalah 51488 Kilobyte.
du menyediakan opsi -h agar informasi yang ditampilkan lebih mudah dipahami:

alam@NeuronServer:~> du -h linux-2.6.28.tar.bz2
51M     linux-2.6.28.tar.bz2

Bagaimana apabila kita ingin mengetahui ukuran sebuah direktori? Penggunaannya seperti tadi:

alam@NeuronServer:~> du -h linux-2.6.28/
40K     linux-2.6.28/firmware/ttusb-budget
188K    linux-2.6.28/firmware/keyspan
264K    linux-2.6.28/firmware/emi26
144K    linux-2.6.28/firmware/edgeport
16K     linux-2.6.28/firmware/ess
...
92K     linux-2.6.28/kernel/irq
172K    linux-2.6.28/kernel/power
280K    linux-2.6.28/kernel/trace
3.2M    linux-2.6.28/kernel
476K    linux-2.6.28/block
344M    linux-2.6.28/

Perintah diatas kurang efektif karena menampilkan informasi ukuran semua file yang ada di direktori linux-2.6.28, padahal yang kita butuhkan hanya ukuran direktori linux-2.6.28 itu sendiri yang ditempatkan di baris paling akhir.
Untuk menyiasatinya lempar output dari perintah du ke perintah tail yang hanya akan menampilkan baris terakhir perintah du tersebut:

alam@NeuronServer:~> du -h linux-2.6.28/ | tail -1
344M    linux-2.6.28/

Opsi -1 dari tail untuk menentukan baris ke berapa yang akan ditampilkan. Defaultnya 10 baris terakhir.

Semoga bermanfaat and have a lot of fun!

Linux

Membuat Application Control Script

December 29th, 2008

Background

Sekitar seminggu yang lalu saya ditugaskan untuk membuat sebuah skrip yang digunakan untuk mengontrol service di Linux. Skrip tersebut harus bisa menjalankan proses server apabila servernya belum dijalankan, mampu memberhentikan service tersebut dan juga merestart server, baik dari keadaan sudah dijalankan atau belum. Server executablenya disini merupakan aplikasi java dalam bentuk java archive.

Work Flow

Apabila user menjalankan skrip tersebut, skripnya akan mengecek apakah user memberikan parameter yang dibutuhkan, yaitu start, restart atau stop. Apabila user memasukkan parameter yang tidak dikenali, skrip akan menampilkan pesan yang memberitahukan bahwa parameter tidak dikenal. Apabila user memberikan parameter start skrip akan memeriksa apakah file server.pid yang berisi pid dari aplikasi tersebut ada atau tidak. Apabila ada skrip akan menampilkan pesan bahwa aplikasi tersebut sudah jalan dengan pid yang dambil dari file server.pid. Apabila belum skrip akan menjalankan aplikasi tersebut dan menyimpan pid dari process itu ke file server.pid. Bila parameter yang diberikan parameter stop maka skrip akan memeriksa apakah aplikasinya memang berjalan dengan mengecek file server.pid. Apabila ada skrip akan memberhentikan process tersebut dengan bantuan pid yang diambil dari file server.pid, dan setelah process-nya berhenti file server.pid tersebut akan dihapus. Apabila file server.pid tidak ditemukan maka skrip akan menampilkan pesan bahwa aplikasi yang dimaksud tidak berjalan. Parameter restart akan menjalankan fungsi stop terlebih dahulu dilanjutkan dengan fungsi start.

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/bin/sh
#License GPL Version 2
#script to start, stop and restart server application
 
#check if user enter the parameter
if [ -z "$1" ]
then
echo "Usage: `basename $0` {start | restart | stop}"
exit
fi
 
#variable that hold java binary
export JAVABIN=`/app/java/jdk1.6.0_03/bin/java`
#variable that hold base directory
export BASEDIR=$HOME/server
#variable that hold jar file or server application location
export JARFILE=$BASEDIR/server.jar
#variable that hold date time format for renaming log file
export DTM=`date +%Y%m%d-%H%M%S`
#variable that hold log file location
export LOG=$BASEDIR/server.log
#variable that hold file containing server pid
export PIDFILE=$BASEDIR/server.pid
 
function startServer(){
if [ -f "$PIDFILE" ]
then
echo "server already running with pid:`cat $PIDFILE`"
else
$JAVABIN -jar $JARFILE &
PID=$!
echo $PID > $PIDFILE
echo "server started with pid:$PID"
fi
}
 
function stopServer(){
#check if server already running
if [ -f "$PIDFILE" ]
then
export PID=`cat $PIDFILE`
echo "server running with pid:$PID"
kill -9 $PID
rm $PIDFILE
mv $LOG $LOG-$DTM
echo "server stopped"
else
echo "server are not running"
fi
}
 
cd $BASEDIR
 
if [ "$1" == "start" ]
then
echo "server start command issued..."
#put the code to start the server here
startServer
exit
elif [ "$1" == "stop" ]
then
echo "server stop command issued..."
#put the code to stop the server here
stopServer
exit
elif [ "$1" == "restart" ]
then
echo "server restart command issued..."
#put the code to restart the server here
stopServer
startServer
exit
else
echo "unknown command `basename $1`, supported command are: start, restart, stop"
exit
fi

Simpan file ini sebagai server.sh. Beri permission execute dengan:

chmod +x server.sh

Jalankan skrip ini dengan perintah:

./server.sh

Explanation

Baris yang pertama berupa:

#!/bin/sh

merupakan opsional. Saya lupa lagi apa istilahnya, intrepeter directive atau apa. Baris ini memberitahukan kepada Linux intrepreter apa yang digunakan untuk mengeksekusi skrip tersebut, dalam hal ini kita meminta agar skrip ini dieksekusi menggunakan shell default yang memiliki path /bin/sh. Di sistem operasi openSUSE /bin/sh merupakan symlink untuk Shell Bash /bin/bash. Apabila kita tidak menggunakan baris ini user harus menjalankan shell dengan skrip ini sebagai parameter seperti dibawah ini:

sh server.sh

Baris berikutnya:

#License GPL Version 2
#script to start, stop and restart server application

merupakan baris komentar. Baris yang diawali dengan # akan diabaikan oleh shell.

Potongan kode berikutnya:

#check if user enter the parameter
if [ -z "$1" ]
then
echo "Usage: `basename $0` start | restart | stop"
exit
fi

untuk melakukan pengecekan apakah user mengeksekusi skrip beserta parameter yang dibutuhkan.

if [ -z "$1" ]

Operator -z digunakan untuk mengecek apakah stringnya null atau tidak. $1 merupakan built-in variable yang dapat kita gunakan untuk mengakses parameter pertama yang dijalankan bersama dengan skrip. Untuk mengakses parameter kedua dan seterusnya ganti nilai 1 dengan 2 dan seterusnya sampai 9. Apabila kosong, yang berarti user tidak memasukkan parameter yang kita harapkan, baris ini menghasilkan nilai true yang berarti akan menjalankan kode berikutnya:

echo "Usage: `basename $0` {start | restart | stop}"
exit

echo digunakan untuk mencetak ke alat output standar, dalam hal ini layar monitor. exit akan menyebabkan skrip untuk keluar.

#variable that hold java binary
export JAVABIN=`/app/java/jdk1.6.0_03/bin/java`
#variable that hold base directory
export BASEDIR=$HOME/server
#variable that hold jar file location
export JARFILE=$BASEDIR/server.jar
#variable that hold date time format for renaming log file
export DTM=`date +%Y%m%d-%H%M%S`
#variable that hold log file location
export LOG=$BASEDIR/server.log
#variable that hold file containing application pid
export PIDFILE=$BASEDIR/server.pid

Potongan kode diatas melakukan insialisasi variabel-variabel yang akan kita gunakan dalam skrip ini. export digunakan untuk menset variabel shell. Pastikan tidak ada spasi antara nama variabel, = dan isi variabelnya. Untuk mengakses variabel tambahkan $ dollar sign didepan nama variabel yang dimaksud.

Perhatikan baris kode ini:

export BASEDIR=$HOME/server

Variable $HOME belum pernah diinisialisasi, lalu bagaimana bisa ada nilainya? Shell Bash memiliki beberapa variabel global yang dapat digunakan oleh process shell-shell yang dijalankan dibawahnya. Dalam hal ini $HOME berisi path home untuk user. Untuk melihat variabel-variabel apa saja yang tersedia, jalankan perintah env di command line. Pastikan variabel yang dinisialisasi belum digunakan untuk menghindari terjadinya konflik variabel.

function startServer(){
if [ -f "$PIDFILE" ]
then
echo "server already running with pid:`cat $PIDFILE`"
else
$JAVABIN -jar $JARFILE &
PID=$!
echo $PID > $PIDFILE
echo "server started with pid:$PID"
fi
}

Potongan kode diatas merupakan fungsi yang digunakan untuk menjalankan server.

function startServer(){

Merupakan syntax untuk membuat fungsi. Syntax ini cukup jelas penggunaannya.

if [ -f "$PIDFILE" ]
then
echo "server already running with pid:`cat $PIDFILE`"

Operator -f digunakan untuk mengecek apakah file yang dimaksud ada yang akan mengembalikan nilai true dan mencetak process id (PID) dari aplikasi server tersebut.

else
$JAVABIN -jar $JARFILE &

Jika file server.pid tidak ada maka aplikasi servernya akan dijalankan, dalam hal ini berarti aplikasi java. Parameter & digunakan untuk mengirim process aplikasi tersebut ke background. Kenapa dikirim ke background? Agar pid aplikasi tersebut dapat diambil menggunakan kode berikut:

PID=$!

Variabel $! digunakan untuk mengambil pid dari background process terakhir, dalam hal ini aplikasi server yang kita jalankan sebelumnya.

echo $PID > $PIDFILE
echo "server started with pid:$PID"
fi
}

Setelah itu nilai pid tersebut disimpan ke dalam file, dan skrip akan menampilkan pesan bahwa server sudah dijalankan dengan pid yang didapatkan sebelumnya.

function stopServer(){
#check if server already running
if [ -f "$PIDFILE" ]
then

Seperti sebelumnya, skrip akan mengecek apakah servernya berjalan atau tidak dengan melihat apakah file server.pid ada atau tidak, apabila ada

export PID=`cat $PIDFILE`
echo "server running with pid:$PID"

nilai pid-nya akan disimpan ke variable $PID

kill -9 $PID

kemudian process tersebut diberhentikan secara paksa menggunakan perintah kill

rm $PIDFILE
mv $LOG $LOG-$DTM
echo "server stopped"

file server.pid kemudian dihapus dan file log yang dihasilkan aplikasi server tersebut di rubah namanya ditambahkan dengan informasi waktu saat perintah ini dijalankan.

else
echo "server are not running"
fi
}

Jika tidak ada skrip akan menampilkan pesan bahwa process yang dimaksud tidak ada.

cd $BASEDIR

Agar semua proses eksekusi dijalankan dari direktori utama, kita pindah ke direktori yang ditentukan sebagai direktori utama dari skrip server ini.

if [ "$1" == "start" ]
then

Kemudian dicek apabila parameter start yang diberikan maka

echo "server start command issued..."
#put the code to start the server here
startServer
exit

skrip akan memanggil fungsi startServer. Cara menjalankan fungsi di bash cukup dengan memanggil nama fungsinya seperti diatas.
Jika yang berikan adalah parameter stop

elif [ "$1" == "stop" ]
then
echo "server stop command issued..."
#put the code to stop the server here
stopServer
exit

maka panggil fungsi stopServer.
Jika parameter yang dipanggil restart

elif [ "$1" == "restart" ]
then
echo "server restart command issued..."
#put the code to restart the server here
stopServer
startServer
exit

Jalankan fungsi stopServer terlebih dahulu dilanjutkan dengan startServer. Fungsi restart disini tidak akan memeriksa apakah aplikasinya sedang berjalan atau tidak, karena memang tidak ada bedanya.
Jika user memberikan parameter diluar yang sudah kita tentukan diatas

else
echo "unknown command `basename $1`, supported command are: start, restart, stop"
exit
fi

maka skrip akan menampilkan pesan bahwa paramater yang dimaksud tidak dikenal.

Summary

Flow dalam scripting language seperti bash cukup mudah untuk dipahami, seperti dalam contoh diatas, skripnya menjalankan baris-baris kodenya satu-persatu mulai dari inisialisasi variabel, pembuatan fungsi sampai flow utamanya yaitu dengan mengecek paramater mana yang dimasukkan user dan menjalankan perintah sesuai dengan parameter yang dimasukkan.
Koreksi, saran dan pertanyaan silakan gunakan fasilitas komentar di bawah ini.

Semoga bermanfaat and have a lot of fun!

Linux , ,