【问题标题】:Running MongoDB shell commands from within shell script connection refused从 shell 脚本连接中运行 MongoDB shell 命令被拒绝
【发布时间】:2021-05-10 21:24:39
【问题描述】:

我在 CloudFormation 模板的 UserData 部分运行以下 shell 脚本:

#!/bin/sh
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list
apt-get update
apt-get install -y mongodb-org
apt install mongodb-clients
systemctl start mongod
systemctl status mongod
systemctl enable mongod
echo "ABOUT TO ENTER WHILE LOOP"
while :
do
    echo "waiting to RUN MONGO COMMANDS"
    echo "$(systemctl show -p ActiveState --value mongod)"
    if [ "$(systemctl show -p ActiveState --value mongod)" = "active" ]
    then
        echo "RUNNING MONGO COMMANDS"
        mongo crawler --eval "db.websites.insertOne({ customerId: '1', url: 'https://dootli.com' })"
        mongo crawler --eval "db.createUser({ user: 'username', pwd: 'password', roles: 'clusterAdmin' })"
        break
    fi
done

据我所知,脚本是有效的,当它在 EC2 实例初始化期间运行时,我是如何获得这个输出(和错误)的:

Reading package lists...
Building dependency tree...
Reading state information...
The following package was automatically installed and is no longer required:
  mongodb-database-tools
Use 'apt autoremove' to remove it.
The following additional packages will be installed:
  libboost-filesystem1.71.0 libboost-iostreams1.71.0
  libboost-program-options1.71.0 libgoogle-perftools4 libpcrecpp0v5
  libsnappy1v5 libtcmalloc-minimal4 libyaml-cpp0.6 mongo-tools
The following packages will be REMOVED:
  mongodb-org mongodb-org-database-tools-extra mongodb-org-mongos
  mongodb-org-server mongodb-org-shell mongodb-org-tools
The following NEW packages will be installed:
  libboost-filesystem1.71.0 libboost-iostreams1.71.0
  libboost-program-options1.71.0 libgoogle-perftools4 libpcrecpp0v5
  libsnappy1v5 libtcmalloc-minimal4 libyaml-cpp0.6 mongo-tools mongodb-clients
0 upgraded, 10 newly installed, 6 to remove and 87 not upgraded.
Need to get 35.2 MB of archives.
After this operation, 44.4 MB disk space will be freed.
Do you want to continue? [Y/n] Abort.
● mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-02-06 20:38:12 UTC; 15ms ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 2738 (mongod)
     Memory: 288.0K
     CGroup: /system.slice/mongod.service
             └─2738 /usr/bin/mongod --config /etc/mongod.conf

Feb 06 20:38:12 ip-172-31-64-168 systemd[1]: Started MongoDB Database Server.
Created symlink /etc/systemd/system/multi-user.target.wants/mongod.service → /lib/systemd/system/mongod.service.
ABOUT TO ENTER WHILE LOOP
waiting to RUN MONGO COMMANDS
RUNNING MONGO COMMANDS
MongoDB shell version v4.4.3
connecting to: mongodb://127.0.0.1:27017/crawler?compressors=disabled&gssapiServiceName=mongodb
Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: Connection refused :
connect@src/mongo/shell/mongo.js:374:17
@(connect):2:6
exception: connect failed
exiting with code 1
MongoDB shell version v4.4.3
connecting to: mongodb://127.0.0.1:27017/crawler?compressors=disabled&gssapiServiceName=mongodb
Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: Connection refused :
connect@src/mongo/shell/mongo.js:374:17
@(connect):2:6
exception: connect failed
exiting with code 1
Cloud-init v. 20.3-2-g371b392c-0ubuntu1~20.04.1 running 'modules:final' at Sat, 06 Feb 2021 20:37:42 +0000. Up 27.35 seconds.
ci-info: no authorized SSH keys fingerprints found for user ubuntu.
Cloud-init v. 20.3-2-g371b392c-0ubuntu1~20.04.1 finished at Sat, 06 Feb 2021 20:38:12 +0000. Datasource DataSourceEc2Local.  Up 56.97 seconds

【问题讨论】:

  • 你确定这行得通吗? apt install mongodb-clients 通常会暂停您的脚本以手动确认安装。 while : 似乎也不是有效的语法。
  • @Marcin 如果我自己在脚本之外运行此命令,它可以工作,所以我假设它应该在脚本中工作
  • 是哪个ubuntu?
  • @Marcin Ubuntu 服务器 20.04 LTS

标签: mongodb amazon-web-services shell amazon-ec2 amazon-cloudformation


【解决方案1】:

我修改了代码以使其正常工作。我发现主要问题是 mongodb-clients 导致monogdb 失败。此外,您的命令 db.createUser 无效,也会导致失败。我没有解决这个问题,因为它与您关于connection refused 的问题无关。您可以提出新问题,为什么您的 db.createUser 不正确(我不知道如何解决这个问题,它是特定于 mongodb 的)。

#!/bin/sh
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list

apt update
apt install -y  mongodb-org

systemctl enable mongod
systemctl start mongod

echo "ABOUT TO ENTER WHILE LOOP"
while :
do
    echo "waiting to RUN MONGO COMMANDS"

    sleep 5

    echo "$(systemctl show -p ActiveState --value mongod)"

    if [ "$(systemctl show -p ActiveState --value mongod)" = "active" ]
    then
        echo "RUNNING MONGO COMMANDS"
        mongo crawler --eval "db.websites.insertOne({ customerId: '1', url: 'https://dootli.com' })"

        [ $? != 0 ] && continue

        echo "db.websites.insertOne command successful"

        break
    fi

done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2012-04-01
    • 1970-01-01
    相关资源
    最近更新 更多