我想分别使用MacOS和LinuxOS创建Shell脚本(.sh)。这就是我所做的:
#!/bin/bash
redis-server &
mongod &
cd ~/some/path && npm start &
cd ~/some/path && ./ngrok http 3000 -region=eu &
echo "My Workspace has been started"
我希望redis服务器在后台运行,并且只有在redis服务器完全启动时,我才要运行mongod服务。等等。
在脚本末尾,我想在终端上看到我的工作区已启动。
现在发生的是将它们全部运行在一起,我可以在redis的终端中看到mixin日志,然后在mongo的终端中看到,然后在npm等中看到一些。
我该如何实现?
答案 0 :(得分:2)
您应该等待我假设的上一条命令的成功执行。可以这样实现:
#!/bin/bash
redis-server && \
mongod &&\
cd ~/some/path && npm start &&\
cd ~/some/path && ./ngrok http 3000 -region=eu &&\
echo "My Workspace has been started"
这样,每个命令都取决于前一个命令的执行。但是,如果其中任何一个没有设置为在执行后退出(这很可能是因为前两个是服务),则它将永远无法正确完成。
因此,您可以为正在运行的服务创建一些检查,例如:
#!/bin/bash
redis-server &
sleep $SOMEMINUTES &&\
ps WHATEVEROPTIONSYOUPREFER | grep redis && \
mongod &
您会在这里看到图案。或者,您可以依靠redis
:
#!/bin/bash
redis-server &
sleep $SOMEREASONABLETIME && redis-cli ping && \
mongod &
cd ~/some/path && npm start &
cd ~/some/path && ./ngrok http 3000 -region=eu &
echo "My Workspace has been started"
对于mongodb
,据我所知,您可能不得不依靠ps
或netcat
来检查状态。 Here You can find some examples。