【问题标题】:Can't stop my startup script on debian squeeze无法在 debian 挤压上停止我的启动脚本
【发布时间】:2012-08-01 02:45:37
【问题描述】:

我正在尝试为我正在做的 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]

【问题讨论】:

    标签: bash node.js deployment debian


    【解决方案1】:

    这里的问题是你的webapp.pid 文件直到你的节点应用程序退出之后才真正被创建,并且在你的启动脚本杀死它之前它不会退出,如果没有.pid 它就无法做到这一点文件。

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

    NODE_ENV=production nohup "$NODE" "$DIR/production/WebApp/server.js" &
    

    【讨论】:

    • 还要注意,Debian 包含start-stop-daemon,它被用于许多启动脚本中;您可能想查看手册页。
    【解决方案2】:

    错误是相当直接的:

    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 文件存储在其他位置。你试过吗?

    【讨论】:

      猜你喜欢
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 2019-02-18
      • 2014-05-13
      相关资源
      最近更新 更多