前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >配置云服务器开机自动化脚本

配置云服务器开机自动化脚本

原创
作者头像
Joyee
发布2024-07-24 20:19:48
1040
发布2024-07-24 20:19:48

需求分析

  1. 云服务器有两个 docker 容器,由于服务器会停机,需要在开机的时候能够自动启动;
  2. 服务器停机,可能导致公网 ip 改变,其中一个容器是源码部署,需要配置连接宿主机即服务器上的 MySQL 服务,所以配置文件中 MySQL 的 ip 的值需要填入每次开机后的实际公网 ip;
  3. 停机或重启前,执行停机服务,优雅地停止 docker,最后再停机。

解决方案

  1. 针对需求 a、c,需要注册两个 service 服务,创建 systemd 服务单元文件,放入到/etc/systemd/system/,分别为start.servicestop-docker.service,这个两个服务分别在服务器启动后、停机前自动执行;
  2. 上述两个服务,执行特定的脚本,start.service执行的是start.shstop-docker.service执行stop.sh
  3. start.sh中,首先获取当前服务器的公网 ip,然后替换掉配置文件中的变量 HOST_IP,最后启动两个容器
  4. stop.sh 中,停止所有正在运行的容器。

具体执行

列出比较关键的两步,获取公网 ip,以及替换变量

代码语言:bash
复制
# 获取宿主机公网IP地址
IP=$(curl -s http://100.100.100.200/latest/meta-data/eipv4)

# 替换配置文件中 IP 为宿主机公网 IP 地址
sed -i "s/{{HOST_IP}}/$IP/g" $CONFIG_FILE

创建 systemd 服务单元文件,格式如下,主要分为三个部分 [Unit]、[Service]、[Install]

代码语言:vim
复制
# start.service
[Unit]
Description=Java Application
After=network.target

[Service]
Type=simple
ExecStart=/yourpath/to/start.sh
Restart=on-failure
User=YOURUSER
WorkingDirectory=/yourpath/to

[Install]
WantedBy=multi-user.target


# stop-docker.service
[Unit]
Description=Stop Docker Containers
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target

[Service]
Type=oneshot
ExecStart=/opt/dataease2.0/stop.sh

[Install]
WantedBy=halt.target reboot.target shutdown.target

收获

  1. 第一次接触到自动化脚本工具,并使用其解决需求;
  2. 需要进一步熟悉 Linux 命令行,以及思考命令行背后的逻辑,对 systemctl 命令控制的那些服务都不熟悉;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求分析
  • 解决方案
  • 具体执行
  • 收获
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档