无法停止我的启动脚本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] 

这里的问题是,你的webapp.pid文件实际上并没有被创build,直到你的节点应用程序退出之后,它才会退出,直到你的启动脚本被杀死,而没有.pid文件就无法完成。

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

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

错误是相当直接的:

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

这个文件是否存在?

如果没有,问题是为什么。 我的直觉是,这个命令是失败的:

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

但是既然你从来不validation它是否真的创build了这个文件,你就不会发现这个错误。

/webroot/webapp.com/production/WebApp/目录/webroot/webapp.com/production/WebApp/存在? 您的用户对该目录有读/写/执行权限吗?

另外一种可能性,因为这个目录被放置在/webroot/webapp.com/production/WebApp中,因为它被应用程序删除了。 您可能需要将pid文件存储在别处。 你尝试过吗?