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 回答