【发布时间】:2021-05-19 10:56:57
【问题描述】:
使用 Ubuntu 18.04。我有以下 bash 脚本来安装和运行 MongoDB。 IT 检查是否安装了 MongoDB 并运行一些 mongo shell 命令:
#!/bin/bash
if [ -f /usr/bin/mongod ]; then
echo "MongoDB is installed on your machine."
kill -0 "$$" || exit
else
password=password
echo "********************* MongoDB 4.0 INSTALL **************************"
echo "MongoDB is is not installed."
echo "******************************************************************"
echo $password | sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 68818C72E52529D4
echo $password | sudo bash -c "echo deb http://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
sudo bash -c "apt update && apt upgrade -y"
sudo bash -c "apt-get install -y mongodb-org"
sudo bash -c "apt update && apt upgrade -y"
echo 'y' | sudo bash -c "apt autoremove && apt clean"
sudo bash -c "mkdir /data /data/db"
sudo bash -c "systemctl enable mongod" #enables Mongo on system startup
sudo bash -c "service mongod start"
sudo bash -c "service mongod restart"
kill -0 "$$" || exit
echo "********************* MongoDB Create DB and Collection **************************"
fi
mongod_status=`systemctl is-active mongod`
echo "${mongod_status}"
if [[ "${mongod_status}" == "active" ]]
then
echo "MongoDB is already running."
else
echo "MongoDB is not running"
rm /var/lib/mongodb/mongod.lock
sudo bash -c "service mongod start"
fi
mongo <<EOF
use fragment
db.createCollection("fragmenthash");
EOF
如果我的系统没有安装 MongoDB,这个脚本会安装并启动它。然后它检查状态,即“活动”。但是当它执行mongo <<EOF section时,它会返回
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
2021-05-19T10:06:01.134+0000 E QUERY [js] 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:356:17
@(connect):2:6
exception: connect failed
即使 MongoDB 的状态是活动的,它仍然会给出这个错误。然而,如果 MongoDB 已经安装,它会成功执行整个脚本并创建数据库和集合。请帮忙。
【问题讨论】:
-
无意冒犯,但那里有一些非常混乱的 shell 脚本。你希望
kill -0 "$$" || exit做什么? -
我遵循了一些教程。现在,我尝试不使用
kill -0 "$$" || exit。还是一样的问题 -
kill不是你的问题,但老实说我无法想象它应该做什么。据我所知,它基本上什么都不做:当父进程存在时,kill成功,它可能会这样做,所以这就是它的结束。 (kill -0并没有真正发送信号,它只是检查进程是否处于活动状态。)
标签: mongodb bash shell ubuntu-18.04