首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用停机坪关闭单神进程安全吗?

用停机坪关闭单神进程安全吗?
EN

Stack Overflow用户
提问于 2022-06-23 11:40:29
回答 1查看 27关注 0票数 0

当我在下面使用docker创建MongoDB容器时,这个图像是我基于centos的MongoDB映像。使用码头是否能安全停止单神进程?我了解到,停靠器停止命令将发送一个SIGTERM信号给PID 1的进程,但我不确定在当前情况下,单神进程是否能够接收到它,因为从下面的情况来看,单神的PID是9。

代码语言:javascript
复制
mongodb:
  image: mongo:centos
  command:  sh /home/mongo/scripts/compose/noauth.sh 27017
  hostname: mongodb
  ports:
  - 27017:27017
  volumes:
  - /home/mongo/mongo_data:/home/mongo/mongo_data
  - /home/mongo/mongo_log:/home/mongo/mongo_log

这是noauth.sh的脚本

代码语言:javascript
复制
#!/bin/bash
if [ ! -d /home/mongo/mongo_data/data_$2/ ];then
mkdir -p /home/mongo/mongo_data/
fi
/home/mongo/mongo_server/bin/mongod --shardsvr --fork --dbpath /home/mongo/mongo_data/ --bind_ip 0.0.0.0 --port $1

这是容器中的过程。

代码语言:javascript
复制
UID        PID  PPID  C STIME TTY          TIME CMD
mongo        1     0  0 Jun16 ?        00:00:58 sh /home/mongo/scripts/compose/noauth.sh 27017
mongo        9     1  0 Jun16 ?        01:03:58 /home/mongo/mongo_server/bin/mongod --shardsvr --fork --dbpath /home/mongo/mongo_data/ --bind_ip 0.0.0.0
EN

回答 1

Stack Overflow用户

发布于 2022-06-23 13:15:29

您希望避免在docker exec ps输出中使用pid 1的shell脚本包装。最简单的方法是使用shell exec内置,它用正在运行的程序替换脚本。

代码语言:javascript
复制
#!/bin/sh
#      ^^ prefer plain `sh` when an option

#         v  make sure to quote strings  v
if [ ! -d "/home/mongo/mongo_data/data_$2" ]; then
  mkdir -p /home/mongo/mongo_data
fi

#vvv this `exec` removes the shell wrapper
exec /home/mongo/mongo_server/bin/mongod \
  --shardsvr \
  --fork \
  --dbpath /home/mongo/mongo_data \
  --bind_ip 0.0.0.0 \
  --port "$1"

您不需要在撰写sh中显式地命名command:解释器。(这些路径似乎并不是Docker Hub mongo image使用的路径;如果这是一个自定义映像,则将其作为图像的CMD而不是组合覆盖。)

完成此操作后,您应该在docker-compose exec mongodb ps -ef时将数据库视为pid 1,然后它将正常地接收docker stop信号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72729546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档