-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathnodejsctl
executable file
·101 lines (91 loc) · 2.1 KB
/
nodejsctl
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/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 5s ..."
kill -15 $PID
sleep 5
node_num=`ps -ef |grep node|grep ${PROJECT_NAME}|grep -v grep|wc -l`
if [ $node_num != 0 ]; then
ps -ef |grep node | 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