linux启动时执行脚本的问答
1. Doris 配置文件解释(nacos管理页面上的):
o 您提供了 Doris 的配置信息。我解释了配置中的 URL、HTTP URL、端口、用户名、密码、数据库名等参数。
url: jdbc:mysql://192.168.199.131:9030/
httpUrl: 192.168.199.131
httpPort: 8030
username: root
o 您询问了关于 Vault 的配置,包括数据库配置和密钥管理服务配置。我解释了配置中的 IP 地址、端口、用户名、密码、数据库名、Vault 的 URI、认证方式和令牌。
o 您询问了如何确认 Doris 的端口信息。
o FE开放了8030,9020,9030,9010端口,be开放了8040,8060,9050,9060端口,那使用mysql客户端连接时,使用哪个端口?我建议使用 Backend 的查询端口(query_port)。瞎回答,应该连接9030端口,上面有。
o 您提到可以通过 Doris 的 Web UI (8030端口)登录并查看表和数据信息,并询问是否还需要使用 MySQL 客户端连接。我解释了 Web UI 和 MySQL 客户端的不同使用场景,并指出如果可以通过 Web UI 满足需求,则不需要 MySQL 客户端。
2. Vault 容器解封:
o 您询问了为什么 Vault 需要启动两个容器:vault 和 unseal-vault。我解释了 Vault 的密封和解封机制,并说明了为什么需要两个容器。
o 除了使用浏览器在页面中解封外,您提到了使用 vault operator unseal 命令解封 Vault。
o 当你在 rc.local 或类似的启动脚本中执行 docker exec 命令时,遇到的错误:
%3. $HOME is not defined:
• 在 rc.local 或系统启动脚本中运行命令时,它们通常不会设置 HOME 环境变量。HOME 环境变量通常在用户登录时设置。
%3. the input device is not a TTY:
• docker exec -it 命令期望一个交互式终端(TTY Teletype Teletypewriter),但是 rc.local 脚本在系统启动时后台运行,没有连接到任何终端。
o -t, --tty Allocate a pseudo-TTY
-t是可以移除,
-i, --interactive Keep STDIN open even if not attached
--privileged Give extended privileges to the command
-i也可以移除吗?
-i 或 --interactive 参数的作用是保持容器的标准输入(STDIN)打开,即使你没有附加到容器上。当你在 rc.local 或类似的启动脚本中执行 docker exec 命令时,通常不需要与容器进行交互,因此可以安全地移除 -i 参数。
o docker exec unseal-vault sh -c 'vault operator unseal "XXX04oGlsHLMmViRiIBcBskXgsNpxG5sbm1FGIq+YYY="'
这里使用了 sh -c 来在容器内执行命令,并用引号包围了整个 vault 命令。
3. Docker Compose depends_on 和 service_healthy:
o 您询问了 Docker Compose 中 depends_on 和 service_healthy 的工作机制。我解释了它们如何控制服务启动顺序和健康检查。
o depends_on:
base:
condition: service_healthy
o 您询问了如何在 Dockerfile 中使用 HEALTHCHECK 指令,并如何查看 base 容器的 Dockerfile。我提供了查看 Docker 历史和 Dockerfile 的方法。您询问了如何使用 docker history 命令查看镜像的构建历史。我提供了如何查看和解释构建历史的指导。
o 您询问了 Docker 健康检查的配置,特别是 Interval 和 Timeout 参数的单位问题。我解释了这些参数的正确单位应该是秒,并指出了可能的误解。
o 您询问了 Docker Compose 中 start_period 选项的作用。我解释了它如何为容器提供初始化时间。start_period: 45s 确保 Docker 在 base 容器启动后的至少 45 秒内不会执行健康检查。
4. rc.local 脚本和 startdoris.sh 脚本:
o 您分享了 /etc/rc.local 和 startdoris.sh 脚本,并询问了它们的作用和优化建议。我提供了对脚本的解释、点评和一些可能的优化建议,包括错误处理、日志管理、环境变量持久化、服务依赖性、安全性、代码风格和性能调优。
/etc/rc.local:
touch /var/lock/subsys/local
source /etc/profile
docker start db redis-master
/root/startdoris.sh
docker start unseal-vault
sleep 3
HOME=/root
export HOME
docker exec unseal-vault sh -c "vault operator unseal 'XXX04oGlsHLMmViRiIBcBskXgsNpxG5sbm1FGIq+YYY='" &>> /tmp/max
docker start vault
docker-compose -f /home/config/docker/docker-compose-dt.yaml up -d
startdoris.sh:
#!/bin/bash
### doris
/data/software/doris/fe/bin/start_fe.sh --daemon
sysctl -w vm.max_map_count=2000000 1>>/tmp/max 2>>/tmp/max
ulimit -n 65535
/data/software/doris/be/bin/start_be.sh --daemon 1>>/tmp/max 2>>/tmp/max
### nacos
/data/sdata/components/nacos/bin/startup.sh -m standalone
用户询问 /usr/lib/systemd/system/rc-local.service 文件内容的解释。详细解释了该文件中每个部分的含义,包括单元描述、条件执行、服务类型、执行命令、超时设置和退出后状态保持。这个服务单元文件定义了如何管理和执行 /etc/rc.d/rc.local 脚本,确保在系统启动时执行自定义命令或脚本。
- 点赞
- 收藏
- 关注作者
评论(0)