Files
cnpmjs.org/bin/nodejsctl
2015-10-15 21:26:06 +08:00

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