1

実行しているWebアプリケーションのデプロイメントをセットアップしようとしていますが、開始スクリプトで問題が発生しています。これが私がこれまでにしたことです:

#!/bin/bash
DIR=/webroot/webapp.com
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NODE_PATH=/usr/local/lib/node_modules
NODE=/usr/local/bin/node

test -x $NODE || exit 0

function start_app {
  NODE_ENV=production nohup "$NODE" "$DIR/production/WebApp/server.js"
  echo $! > "$DIR/production/WebApp/webapp.pid"
}

function stop_app {
  kill `cat $DIR/production/WebApp/webapp.pid`
}

case $1 in
   start)
      start_app ;;
    stop)
      stop_app ;;
    restart)
      stop_app
      start_app
      ;;
    *)
      echo "usage: webapp.com {start|stop}" ;;
esac
exit 0

私はそれをそのように始めることができます、しかし私がそれを止めようとすると私はこれを手に入れます:

ssh mydomain.com /etc/init.d/webapp.com restart
cat: /webroot/webapp.com/production/WebApp/webapp.pid: No such file or directory
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
4

2 に答える 2

1

エラーはかなり簡単です:

cat: /webroot/webapp.com/production/WebApp/webapp.pid: No such file or directory

このファイルは存在しますか?

そうでない場合、問題はその理由です。私の推測では、このコマンドは失敗しています:

echo $! > "$DIR/production/WebApp/webapp.pid"

ただし、実際にファイルが作成されたことを確認しないため、エラーは発生しません。

ディレクトリ/webroot/webapp.com/production/WebApp/は存在しますか? ユーザーはそのディレクトリに対する読み取り/書き込み/実行権限を持っていますか?

別の可能性として、このディレクトリは配置され/webroot/webapp.com/production/WebAppているため、アプリケーションによって削除されている可能性があります。pid ファイルを別の場所に保存する必要がある場合があります。あなたはそれを試しましたか?

于 2012-08-01T03:22:16.373 に答える
1

ここでの問題はwebapp.pid、ノードアプリが終了するまでファイルが実際に作成されず、起動スクリプトがファイルを強制終了するまで終了しないことです。これは、.pidファイルなしでは実行できません。

.pidファイルを作成するコードが実際に実行されるように、ノードをバックグラウンドで実行する必要があります。

NODE_ENV=production nohup "$NODE" "$DIR/production/WebApp/server.js" &
于 2012-08-01T05:02:43.097 に答える