Как выполнить команды mongo из bash?
Я пытаюсь запустить эту команду из сценария bash:
mongo 192.168.10.20:27000 --eval "use admin && db.shutdownServer() && quit()"
но я получаю эту ошибку :
[rs.initiate() && use admin && db.shutdownServer() && quit()] doesn't exist
как это сделать без использования JS-файла?
3 ответов
здесь различия между интерактивными и сценариями mongo
оболочки сессий. В частности, такие команды, как use admin
недопустимы JavaScript и будут работать только в сеансе интерактивной оболочки.
рабочий эквивалент вашей командной строки выключения будет:
mongo 192.168.10.20:27000/admin --eval "db.shutdownServer()"
вы можете включить базу данных для использования в строку подключения, и нет необходимости выходить из сценария mongo
сеанс оболочки.
Если вам нужно изменить базы данных из сценария сеанса, есть db.getSiblingDB()
функции JavaScript. Альтернативный способ написать команду shutdown выше будет:
mongo 192.168.10.20:27000 --eval "db=db.getSiblingDB('admin');db.shutdownServer()"
вы можете использовать heredoc-синтаксиса.
#! /bin/sh
mongo <<EOF
use admin
db.shutdownServer()
quit()
exit
оказывается, синтаксис heredoc выдает предупреждение, когда EOF отсутствует в конце для сценария bash. Это версия сценария bash.
#! /bin/bash
mongo <<EOF
use admin
db.shutdownServer()
quit()
EOF
вот результат, я думаю, это то, что вы ожидали.
MongoDB shell version: 2.4.14
connecting to: test
switched to db admin
Wed Jun 24 17:07:23.808 DBClientCursor::init call() failed
server should be down...
Wed Jun 24 17:07:23.810 trying reconnect to 127.0.0.1:27017
Wed Jun 24 17:07:23.810 reconnect 127.0.0.1:27017 ok
Wed Jun 24 17:07:23.812 Socket recv() errno:104 Connection reset by peer 127.0.0.1:27017
Wed Jun 24 17:07:23.812 SocketException: remote: 127.0.0.1:27017 error: 9001 socket exception [RECV_ERROR] server [127.0.0.1:27017]
Wed Jun 24 17:07:23.812 DBClientCursor::init call() failed
С mongo docs:
--eval option
использовать -- eval опция mongo для передачи оболочки фрагмента JavaScript, как показано ниже:
mongo test --eval "printjson(db.getCollectionNames())"
вы также можете поместить свои фрагменты JS в затем выполните:
mongo < myScript.js
вы также можете найти более полезные вещи в этом и