102 lines
2.1 KiB
Bash
Executable File
102 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#set NODE_ENV = production
|
|
export NODE_ENV='production'
|
|
|
|
#set ulimit
|
|
ulimit -c unlimited
|
|
|
|
cd `dirname $0`/..
|
|
NODEJS='node'
|
|
BASE_HOME=`pwd`
|
|
PROJECT_NAME=`basename ${BASE_HOME}`
|
|
STDOUT_LOG=`$NODEJS -e "console.log(require('path').join(require('$BASE_HOME/config').logdir, 'nodejs_stdout.log'));\
|
|
process.exit(0);"`
|
|
NODE_DISPATH_PATH=${BASE_HOME}/dispatch.js
|
|
PROG_NAME=$0
|
|
ACTION=$1
|
|
usage() {
|
|
echo "Usage: $PROG_NAME {start|stop|status|restart}"
|
|
exit 1;
|
|
}
|
|
|
|
if [ $# -lt 1 ]; then
|
|
usage
|
|
fi
|
|
|
|
function get_pid {
|
|
PID=`ps ax | grep node | grep ${PROJECT_NAME}/dispatch.js | awk '{print $1}'`
|
|
}
|
|
|
|
#start nodejs
|
|
start()
|
|
{
|
|
get_pid
|
|
if [ -z $PID ]; then
|
|
echo "Starting $PROJECT_NAME ..."
|
|
echo "nohup $NODEJS $NODE_DISPATH_PATH > $STDOUT_LOG 2>&1 &"
|
|
nohup $NODEJS $NODE_DISPATH_PATH > $STDOUT_LOG 2>&1 &
|
|
sleep 2
|
|
get_pid
|
|
echo "Start nodejs success. PID=$PID"
|
|
else
|
|
echo "$PROJECT_NAME is already running, PID=$PID"
|
|
fi
|
|
}
|
|
|
|
stop()
|
|
{
|
|
get_pid
|
|
if [ ! -z "$PID" ]; then
|
|
echo "Waiting $PROJECT_NAME stop for 2s ..."
|
|
kill -15 $PID
|
|
sleep 2
|
|
|
|
node_num=`ps -ef | grep ${PROJECT_NAME} | grep -v grep | wc -l`
|
|
if [ $node_num != 0 ]; then
|
|
ps -ef | grep ${PROJECT_NAME} |grep -v grep|awk '{print $2}'|xargs kill -9
|
|
ipcs -s | grep 0x | awk '{print $2}' | xargs -n1 ipcrm -s > /dev/null 2>&1
|
|
ipcs -m | grep 0x | awk '{print $2}' | xargs -n1 ipcrm -m > /dev/null 2>&1
|
|
fi
|
|
mv -f $STDOUT_LOG "${STDOUT_LOG}.`date '+%Y%m%d%H%M%S'`"
|
|
else
|
|
echo "$PROJECT_NAME is not running"
|
|
fi
|
|
}
|
|
|
|
status()
|
|
{
|
|
get_pid
|
|
if [ ! -z $PID ]; then
|
|
echo "$PROJECT_NAME PID: $PID"
|
|
node_processes=`ps -ef | grep $PID | grep -v grep`
|
|
echo "master:"
|
|
echo "$node_processes" | grep dispatch.js
|
|
worker_count=`echo "$node_processes" | grep -v dispatch.js | wc -l`
|
|
echo "workers: $worker_count"
|
|
echo "$node_processes" | grep -v dispatch.js
|
|
else
|
|
echo "$PROJECT_NAME is not running"
|
|
fi
|
|
exit 0;
|
|
}
|
|
|
|
case "$ACTION" in
|
|
start)
|
|
start
|
|
;;
|
|
status)
|
|
status
|
|
;;
|
|
stop)
|
|
stop
|
|
;;
|
|
restart)
|
|
stop
|
|
start
|
|
;;
|
|
*)
|
|
usage
|
|
;;
|
|
esac
|