Execute java program Back To Basic with shell script

วันนี้ผมมีความจำเป็นที่จะต้อง run java applicatoin แบบพึ่งพา .class ปกติจะเคยเห็นแต่ .jar แล้วก็ใช้คำสั่ง java -jar เพื่อรัน วันนี้มาดูการรันแบบใช้ .class กันดีกว่า เพราะผมต้องเอาไปใช้กับ crontab

folderstructure
appname
-build
++classes (ส่วนนี้ประกอบไปด้วย class และมี main class อยู่ )
+conf
+config
+lib (library ต่างๆ .jar)
backendclient.sh
setenv.sh

setenv.sh

MAINCLASS=org.kojo.Main
CLASSPATH=./build/classes:./lib/mylib.1.01/classes:./lib/*

apprun.sh

#!/bin/sh
echo ""
echo "----------- call setenv.sh ---------------"
#เรียก setenv.sh เพื่อประกาศตัวแปลที่จะนำไปใช้ต่อ แยกไว้เพื่อง่ายต่อการแก้ไข
. "./setenv.sh"
echo "ClassPath="$CLASSPATH
echo "MainClass="$MAINCLASS
echo "------------------------------------------"
echo ""
ARGS='-printline yes'
echo "args="$ARGS
echo $APP_HOME
java -cp $CLASSPATH $MAINCLASS $ARGS

หากว่าเจอ error

/bin/bash^M: bad interpreter: no such file or directory

เป็นเพราะไฟล์ที่เราทำใน dos จะไปใช้ใน unix/linux มีอักขระพิเศษที่มันไม่ต้องการอยู่ให้ใช้คำสั่งนี้ครับ

dos2unix [ชื่่อไฟล์]

เสร็จแล้วนะครับรันได้เลย

./runapp.sh

ปล.
เวลาไปใช้ใน crontab นั้นการไม่ระบุ path เต็มของไฟล์ที่จะรัน จะทำให้มันหาไม่เจอ FileNotFound ซึ่งผมก็มีวิธีแถๆ ไปดังนี้
จากตัวอย่างจะมีการรันไฟล์ ./setenv.sh นะครับซึ่ง crontab มันจะหาไม่เจอเพราะ ./ ไม่ใช่ที่อยู่ของไฟล์จริงๆ

#!/bin/sh
#แก้ไขให้ใช้ได้กับ crontab ประกาศ APP_HOME และ cd APP_HOME เข้าไปครับ
APP_HOME=/app/myapp/app1-1.1/
cd $APP_HOME
echo ""
echo "----------- call setenv.sh ---------------"
#คราวนี้ ./ ก็จะถูกมองเป็น path APP_HOME ครับ
. "./setenv.sh"
echo "ClassPath="$CLASSPATH
echo "MainClass="$MAINCLASS
echo "------------------------------------------"
echo ""
ARGS='-printline yes'
echo "args="$ARGS
echo $APP_HOME
java -cp $CLASSPATH $MAINCLASS $ARGS

จบนะครับ….

About WK

Kajook is a Senior Software Engineer. Job is Design & Develop in Java EE environment on Glassfish. I'm Interested in Agile software development ,iOS and Android.
This entry was posted in idea, knowledge and tagged , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s