无法停止我的启动脚本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文件存储在别处。 你尝试过吗?