#yum -y update #yum -y groupinstall "Development Tools" #yum -y install screen
Node.js Installation
#cd /usr/src #wget http://nodejs.org/dist/v0.10.4/node-v0.10.4.tar.gz #tar zxf node-v0.10.4.tar.gz #cd node-v0.10.4 ./configure make make install #cd /home/anario/ #touch app.js var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Anario\n'); }) .listen(8124, '0.0.0.0'); console.log ('Server running at http://server:8124'); #node app.js #npm install forever -g #forever start app.js | [forever stop app.js]
Set up an init.d Script for Forever
#!/bin/bash # # Service script for a Node.js application running under Forever. # # This is suitable for Fedora, Red Hat, CentOS and similar distributions. # It will not work on Ubuntu or other Debian-style distributions! # # There is some perhaps unnecessary complexity going on in the relationship between # Forever and the server process. See: https://github.com/indexzero/forever # # 1) Forever starts its own watchdog process, and keeps its own configuration data # in /var/run/forever. # # 2) If the process dies, Forever will restart it: if it fails but continues to run, # it won't be restarted. # # 3) If the process is stopped via this script, the pidfile is left in place; this # helps when issues happen with failed stop attempts. # # 4) Which means the check for running/not running is complex, and involves parsing # of the Forever list output. # # chkconfig: 345 80 20 # description: my application description # processname: my_application_name # pidfile: /var/run/my_application_name.pid # logfile: /var/log/my_application_name.log # # Source function library. . /etc/init.d/functions NAME=node SOURCE_DIR=/home/anario/ SOURCE_FILE=app.js user=root pidfile=/var/run/$NAME.pid logfile=/var/log/$NAME.log forever_dir=/var/run/forever node=node forever=/usr/local/bin/forever sed=sed export PATH=$PATH:/usr/local/bin/node:/usr/local/bin/forever export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules start() { echo "Starting $NAME node instance: " if [ "$foreverid" == "" ]; then # Create the log and pid files, making sure that # the target use has access to them touch $logfile chown $user $logfile touch $pidfile chown $user $pidfile # Launch the application daemon --user=root \ $forever start -p $forever_dir --pidFile $pidfile -l $logfile \ -a -d $SOURCE_DIR/$SOURCE_FILE RETVAL=$? else echo "Instance already running" RETVAL=0 fi } stop() { echo -n "Shutting down $NAME node instance : " $forever stopall RETVAL=$? } if [ -f $pidfile ]; then read pid < $pidfile else pid="" fi if [ "$pid" != "" ]; then # Gnarly sed usage to obtain the foreverid. sed1="/$pid\]/p" sed2="s/.*\[\([0-9]\+\)\].*\s$pid\.*/\1/g" foreverid=`$forever list -p $forever_dir | $sed -n $sed1 | $sed $sed2` else foreverid="" fi case "$1" in start) start ;; stop) stop ;; status) status -p ${pidfile} ;; *) echo "Usage: {start|stop|status}" exit 1 ;; esac exit $RETVAL
/etc/init.d/node start