如果服务器尚未运行,我想编写一个grunt任务来启动进程mongod
。我需要运行一个mongod进程,但是还需要grunt-watch在以后的任务流程中工作。
This question解释了如何使用grunt-shell
启动mongod ...接受的答案是阻止,异步版本即使存在新服务器也会生成新服务器。
是否有办法(例如shell脚本)只有在没有运行的情况下启动mongod,而不会阻止其余的grunt任务流?
由于
答案 0 :(得分:6)
这是一个更清洁的版本
将此startMongoIfNotRunning.sh
存储在与Gruntfile相同的位置:
# this script checks if the mongod is running, starts it if not
if pgrep -q mongod; then
echo running;
else
mongod;
fi
exit 0;
在你的Gruntfile中:
shell: {
mongo: {
command: "sh startMongoIfNotRunning.sh",
options: {
async: true
}
},
}
编辑 - 以下原始版本
好的 - 我觉得这个工作正常......
创建一个shell脚本,如果它没有运行将启动mongod ...将它保存在某个地方,可能在你的项目中。我把它命名为startMongoIfNotRunning.sh:
# this script checks if the mongod is running, starts it if not
`ps -A | grep -q '[m]ongod'`
if [ "$?" -eq "0" ]; then
echo "running"
else
mongod
fi
您可能必须使其可执行:chmod +x path/to/script/startMongoIfNotRunning.sh
安装grunt-shell-spawn:npm install grunt-shell-spawn --save-dev
然后在你的Gruntfile中添加:
shell: {
mongo: {
command: "exec path/to/script/startMongoIfNotRunning.sh",
options: {
async: true
}
},
}
(如果您使用的是自己,使用<%= yeoman.app %>
无法正常工作,因为这些路径与整个项目相关,因此您可以使用“app”而不是整个脚本路径。我我相信你可以让它工作,我只是不知道如何获得路径
如果您只是执行任务grunt shell:mongo
mongod将启动但我无法使用grunt shell:mongo:kill
关闭它。但是,假设您稍后使用阻止任务(我正在使用watch
),那么当您结束该任务时它将自动被终止。
希望这有助于某人!
答案 1 :(得分:3)
我发现你的解决方案非常有用,但实际上想在重启grunt服务器时杀死mongod。所以我明白了:
#!/bin/sh
# this script checks if the mongod is running, kills it and starts it
MNG_ID="`ps -ef | awk '/[m]ongod/{print $2}'`"
if [ -n "$MNG_ID" ]; then
kill $MNG_ID
fi
mongod
在我的Mac上工作得非常好。我的grunt文件看起来像这样:
//used to load mongod via shell
shell: {
mongo: {
command: './mongo.sh',
options: {
async: true
}
}
}
所以我的mongo.sh和我的Grunfile.js在同一个位置
干杯
答案 2 :(得分:0)
另外两个答案是正确的。但是,为了完整起见,这里是Windows上的等效批处理脚本。将以下内容另存为startMongoIfNotRunning.bat
:
tasklist /fi "imagename eq mongod.exe" |find "=" > nul
if errorlevel 1 mongod
如果有一个名为mongod.exe的任务正在运行,那么=
字符应出现在输出中 - 因此如果它没有运行,则找不到=
字符,并且errorlevel变量将是设为1.
其余部分与@MaxBates答案相同。