diff --git a/pom.xml b/pom.xml
index ffdf7644..c3da8610 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,6 +27,25 @@
${project.build.sourceEncoding}
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 2.2.1
+
+
+ src/main/assembly.xml
+
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
diff --git a/src/main/assembly.xml b/src/main/assembly.xml
new file mode 100644
index 00000000..af7ceb8a
--- /dev/null
+++ b/src/main/assembly.xml
@@ -0,0 +1,31 @@
+
+ bin
+
+ zip
+
+
+
+ true
+ lib
+
+
+
+
+ src/main
+ /
+
+ *.sh
+ *.bat
+
+
+
+ target/classes
+ /conf
+
+ *.properties
+ *.xml
+ *.me
+
+
+
+
\ No newline at end of file
diff --git a/src/main/startup.sh b/src/main/startup.sh
new file mode 100644
index 00000000..1732f325
--- /dev/null
+++ b/src/main/startup.sh
@@ -0,0 +1,142 @@
+ulimit -n 110000
+#JDK home
+JAVA_HOME="/usr/local/java/"
+
+#executing user
+RUNNING_USER=root
+
+#Run home
+APP_HOME="/usr/local/weixin/weixin-service"
+
+#main class
+APP_MAINCLASS=com.foxinmy.weixin4j.server.WeixinServiceBootstrap
+
+#classpath
+CLASSPATH=$APP_HOME/classes
+for i in "$APP_HOME"/lib/*.jar; do
+ CLASSPATH="$CLASSPATH":"$i"
+done
+
+CLASSPATH="$CLASSPATH":"$APP_HOME"/conf
+
+#jvm options
+JAVA_OPTS="-Xms256m -Xmx512m -Djava.awt.headless=true -XX:MaxPermSize=128m -server -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=85 -XX:+DisableExplicitGC -Xnoclassgc -Xverify:none"
+
+#psid
+psid=0
+
+checkpid() {
+ javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`
+
+ if [ -n "$javaps" ]; then
+ psid=`echo $javaps | awk '{print $1}'`
+ else
+ psid=0
+ fi
+}
+
+###################################
+#startup
+###################################
+start() {
+ checkpid
+
+ if [ $psid -ne 0 ]; then
+ echo "================================"
+ echo "warn: $APP_MAINCLASS already started! (pid=$psid)"
+ echo "================================"
+ else
+ echo -n "Starting $APP_MAINCLASS ..."
+# JAVA_CMD="nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAINCLASS >/dev/null 2>&1 &"
+ JAVA_CMD="$JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAINCLASS &"
+ su - $RUNNING_USER -c "$JAVA_CMD"
+ checkpid
+ if [ $psid -ne 0 ]; then
+ echo "(pid=$psid) [OK]"
+ else
+ echo "[Failed]"
+ fi
+ fi
+}
+
+###################################
+#stop
+###################################
+stop() {
+ checkpid
+
+ if [ $psid -ne 0 ]; then
+ echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "
+ su - $RUNNING_USER -c "kill -9 $psid"
+ if [ $? -eq 0 ]; then
+ echo "[OK]"
+ else
+ echo "[Failed]"
+ fi
+
+ checkpid
+ if [ $psid -ne 0 ]; then
+ stop
+ fi
+ else
+ echo "================================"
+ echo "warn: $APP_MAINCLASS is not running"
+ echo "================================"
+ fi
+}
+
+###################################
+#status
+###################################
+status() {
+ checkpid
+
+ if [ $psid -ne 0 ]; then
+ echo "$APP_MAINCLASS is running! (pid=$psid)"
+ else
+ echo "$APP_MAINCLASS is not running"
+ fi
+}
+
+###################################
+#info
+###################################
+info() {
+ echo "System Information:"
+ echo "****************************"
+ echo `head -n 1 /etc/issue`
+ echo `uname -a`
+ echo
+ echo "JAVA_HOME=$JAVA_HOME"
+ echo `$JAVA_HOME/bin/java -version`
+ echo
+ echo "APP_HOME=$APP_HOME"
+ echo "APP_MAINCLASS=$APP_MAINCLASS"
+ echo "****************************"
+}
+
+###################################
+#access only 1 argument:{start|stop|restart|status|info}
+###################################
+case "$1" in
+ 'start')
+ start
+ ;;
+ 'stop')
+ stop
+ ;;
+ 'restart')
+ stop
+ start
+ ;;
+ 'status')
+ status
+ ;;
+ 'info')
+ info
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|status|info}"
+ exit 1
+esac
+exit 0