サーバ起動時にnodeで自分が作った.jsを起動する

1./etc/init.d/nodeを作る

vi /etc/init.d/node

#!/bin/sh
#
# chkconfig: 35 99 99
# description: Node.js /MyDirectory/app.js
#

. /etc/rc.d/init.d/functions

user="root" # 実行するユーザー

nodejs="/root/.nvm/v0.6.12/bin/node" # Node.jsのパス
rootdir="/MyDirectory/" #app.jsがあるパス

server="$rootdir/app.js" # サーバへのパス

logfile="/var/log/node/app.log" # ログファイルのパス

lockfile="/var/lock/subsys/node" # ロックファイルへのパス

start()
{
    if [ ! -f $lockfile ] ; then
        echo -n $"Starting $server: "
        runuser -l "$user" -c "nohup $nodejs $server >> $logfile &" && echo_success || echo_failure
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch $lockfile
    else
        echo "$server is locked."
        RETVAL=1
    fi
}

stop()
{
    echo -n $"Stopping $server: "
    pid=`ps -aefw | grep "$nodejs $server" | grep -v " grep " | awk '{print $2}'`
    kill -9 $pid > /dev/null 2>&1 && echo_success || echo_failure

    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f $lockfile
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        RETVAL=1
esac

exit $RETVAL

2.chkconfigに登録する

  1. chkconfig --add node
  2. chkconfig node on

rebootすると/etc/init.d/node startされていると思います。

前の記事でapp.jsが起動できない時

※下のものに差し替えると動くと思います。
  configureがちょっとずつ変わっているみたいです。

/**
 * Module dependencies.
 */

var express = require('express');

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
        app.set('views', __dirname + '/views');
        app.set('view engine', 'ejs');
        app.use(express.bodyParser());
        app.use(express.methodOverride());
        app.use(express.cookieParser());
        app.use(express.compiler({ src: __dirname + '/public', enable: ['less'] }));
        app.use(app.router);
        app.use(express.static(__dirname + '/public'));
        app.use(express.logger());
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Routes

app.get('/', function(req, res){
  res.render('index', {
    locals: {
      title: 'Express'
    }
  });
});

// Only listen on $ node app.js

if (!module.parent) {
  app.listen(3000);
  console.log("Express server listening on port %d", app.address().port)
}
    

AmazonAMI64bitにnode.js v0.6.12とnpmでexpressとかをインストールするまで

※書きかけで置いていたので、追記&修正しました。

 1.yum

  ※インストールに必要なライブラリを入れる

  1. yum install gcc.x86_64 gcc-c++.x86_64 libgcc.x86_64 gcc-gfortran.x86_64 gcc-java.x86_64 gcc-objc.x86_64 gcc-objc++.x86_64
  2. yum install git.x86_64
  3. yum install openssl-devel.x86_64
  4. yum install make.x86_64

 2.nvm

  ※nodeのバージョン管理ツール

  1. git clone git://github.com/creationix/nvm.git ~/.nvm
  2. . ~/.nvm/nvm.sh
  3. vi ~/.bashrc

    . ~/.nvm/nvm.sh

 3.node.js

  1. nvm install v0.6.12
       ※安定版 開発版はv0.7.5
           foreverが使えないので注意 

4.npm

  1. npm install socket.io -g
       ※通信用(Server)
  2. npm install socket.io-client -g
       ※通信用(Client)  
  3. npm install express -g
       ※テンプレート
  4. npm install ejs -g
       ※テンプレート 
  5. npm install jsdom -g
       ※jQuery使えるようにするツール
  6. npm install forever -g
       ※落ちても再起動してくれるツール
  7. npm install node-dev
       ※.jsのソースが変更された時、再起動してくれるツール 

 5.bashrc 

  1. ユーザにnodeを使えるようにPATHを張る
    vi ~/.bashrc
      if [ -s ~/.nvm/nvm.sh ]; then
              . ~/.nvm/nvm.sh
              nvm alias default 0.6 > /dev/null
              nvm use v0.6.12
      fi
      PATH="$PATH":/root/.nvm/v0.6.12/bin:/root/node_modules/express/bin
       ※ /root/.nvm/v0.6.12/binはnodeがあるところ 
         /root/node_modules/express/binはexpressがあるところです
        テスト機のrootでほいほい作ってしまったので/root/になっています 

 6.express

  1. 作成したいディレクトリに移動
  2. express -t ejs sample
     ※sampleを作る
  3. cd tmmorpg
  4. npmモジュールをリンクさせる
        ※linkでエラーの時はinstallする。
  5.   npm link socket.io
      npm link express
      npm link ejs
      npm link jsdom
      npm link socket.io-client 
      npm link forever 
      npm link node-dev  

 7.テスト起動 

   ※sampleディレクトリのapp.jsを実行

  1. cd sample
  2. node app.js
    http://localhost:3000/
     にアクセスすると、views/index.ejsが帰ってくるはず

    node-dev app.js
     だと、起動中にapp.jsの中身を変えると、nodeが再起動するはず
    forever start app.js
     だと、落ちても勝手に再起動されるはず