我正在尝试为我正在进行的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]
答案 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