如果服務器尚未運行,我想編寫一個grunt任務來啓動進程mongod
。我需要運行一個mongod進程,但也需要grunt-watch在稍後的任務流中工作。grunt任務:如果未運行,則啓動mongod
This question解釋瞭如何使用grunt-shell
來啓動mongod ...接受的答案是阻塞,即使存在異步版本也會產生新的服務器。
有沒有辦法(例如shell腳本)只有在沒有運行的情況下才啓動mongod,而不阻塞其他的grunt任務流?
感謝
如果服務器尚未運行,我想編寫一個grunt任務來啓動進程mongod
。我需要運行一個mongod進程,但也需要grunt-watch在稍後的任務流中工作。grunt任務:如果未運行,則啓動mongod
This question解釋瞭如何使用grunt-shell
來啓動mongod ...接受的答案是阻塞,即使存在異步版本也會產生新的服務器。
有沒有辦法(例如shell腳本)只有在沒有運行的情況下才啓動mongod,而不阻塞其他的grunt任務流?
感謝
這裏有一個更清楚地版本
商店這是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
安裝咕嚕殼重生:npm install grunt-shell-spawn --save-dev
然後在你的Gruntfile補充一點:
shell: {
mongo: {
command: "exec path/to/script/startMongoIfNotRunning.sh",
options: {
async: true
}
},
}
(如果你使用yeoman,使用<%= yeoman.app %>
不起作用,因爲這些路徑是相對於整個項目,所以喲你得到'app'之類的東西,而不是整個腳本的路徑。我相信你可以得到它的工作,我只是不知道如何得到的路徑)
如果你只是執行任務grunt shell:mongo
mongod將開始,但我無法使用grunt shell:mongo:kill
關閉它。但是,假設您稍後使用阻塞任務(我正在使用watch
),那麼在您結束該任務時應自動終止它。
希望這可以幫助別人!
我發現你的解決方案真的很有用,但實際上想在重啓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真的很好。而我的咕嚕文件看起來像這樣:
//used to load mongod via shell
shell: {
mongo: {
command: './mongo.sh',
options: {
async: true
}
}
}
所以我的mongo.sh與我的Grunfile位於相同的位置。js
Cheers
你必須將'mongod'移出if語句,不是嗎? –
@MaxBates:你說得對嗎,還是你對!剛剛編輯:) – x057
其他兩個答案都是正確的。但是,爲了完整起見,這裏是Windows上的等效批處理腳本。以下內容作爲startMongoIfNotRunning.bat
:
tasklist /fi "imagename eq mongod.exe" |find "=" > nul
if errorlevel 1 mongod
如果運行叫mongod.exe那麼=
字符應該出現在輸出端的任務 - 將不會被發現,因此,如果它沒有運行=
字符和ERRORLEVEL變量將被設置爲1.
其餘部分與@MaxBates相同。
http://stackoverflow.com/a/18275415/1085699 H是一個很好的腳本解決方案。 –
即時消息並不真正流暢,我可以把所有的東西放在一行,它會運行嗎? –
不,你將不得不使它成爲一個腳本,然後從咕嚕聲中調用它。這可能會有所幫助:http://stackoverflow.com/questions/18368575/execute-shell-script-in-gruntfile-and-assign-result-to-variable –