我编写了一个node.js应用程序,并编写了一个bash脚本来启动它并验证它是否正在运行。我先运行脚本npm start &
,然后检查是否要使用netstat打开要打开的端口。当我在脚本运行之后运行它时,检查工作正常,但是在脚本运行期间,检查失败,因为在运行检查之前服务器尚未完全启动。我的代码如下:
echo "Starting the server..."
npm start & > /dev/null 2>&1
if [[ -z $(sudo netstat -tulpn | grep :$portNum | grep node) ]] ; then
echo -e "\tPort $portNum is not in use, something went wrong. Exiting."
else
echo -e "\tPort $portNum is in use!"
fi
是否有采取上述脚本并进行更改的好方法,以便在服务器完全启动之前不会进行检查?如果可以帮助,我不想使用sleep
。
答案 0 :(得分:2)
您可以使用wait
通话:
echo "Starting the server..."
npm start & > /dev/null 2>&1
wait
if [[ -z $(sudo netstat -tulpn | grep :$portNum | grep node) ]] ; then
echo -e "\tPort $portNum is not in use, something went wrong. Exiting."
else
echo -e "\tPort $portNum is in use!"
fi
对此的唯一限制是,如果npm自身进行守护进程,则它不再是脚本的子级,因此wait
命令将无效(原因是进程通过终止并生成生成自己的守护进程一个继承其角色的新流程。