在debian squeeze上无法阻止我的启动脚本

时间:2012-08-01 02:45:37

标签: bash node.js deployment debian

我正在尝试为我正在进行的webapp设置部署,并且我在启动脚本时遇到了一些问题。这是我到目前为止所做的:

#!/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]

2 个答案:

答案 0 :(得分: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文件存储在其他位置。你试过了吗?

答案 1 :(得分:1)

这里的问题是,您的webapp.pid文件实际上并没有在您的节点应用程序退出之后创建,并且在您的启动脚本将其终止之前它不会退出,如果没有{ {1}}档案。

您需要在后台运行节点,以便创建.pid文件的代码实际上有机会运行:

.pid