grunt任务:如果没有运行,启动mongod

时间:2013-12-20 04:45:15

标签: javascript mongodb gruntjs

如果服务器尚未运行,我想编写一个grunt任务来启动进程mongod。我需要运行一个mongod进程,但是还需要grunt-watch在以后的任务流程中工作。

This question解释了如何使用grunt-shell启动mongod ...接受的答案是阻止,异步版本即使存在新服务器也会生成新服务器。

是否有办法(例如shell脚本)只有在没有运行的情况下启动mongod,而不会阻止其余的grunt任务流?

由于

3 个答案:

答案 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答案相同。