0
点赞
收藏
分享

微信扫一扫

香蕉派BPI-R4 Wifi7路由器采用联发科MT7988A (Filogic 880)设计

文章目录

使用场景

  • 我们的平台使用docker部署,使用docker-compose进行管理
  • 平台部署到客户环境后,一部分小客户,使用自己机房或单独的服务器,有时候会断电重启
  • 断电重启后,服务要能自动拉起来。首先docker服务要开机自启动,平台也要开机自启动

重启脚本

  • 首先将docker服务,加入开机自启动
systemctl enable docker
  • 然后编写平台服务重启脚本docker-restart.sh,主要是根据自己的应用情况,搞一个启动顺序
#!/bin/bash

cd /home
echo '当前目录为:'$(pwd)

if cat '/etc/rc.d/rc.local' | grep "/home/docker-restart" > /dev/null
then
echo "已加入重启脚本"
else
echo "将docker服务重启加入服务器重启脚本"
chmod +x /etc/rc.d/rc.local
chmod +x $(pwd)/docker-restart.sh
cat >>/etc/rc.d/rc.local<<EOF
sh $(pwd)/docker-restart.sh &
EOF

fi

docker network create signal-network
echo '开始重启服务'
echo '当前目录为:'$(pwd)
cd signal/instance/
docker-compose --compatibility up -d postgresql zookeeper redis portainer
echo "为保证中间件创建完成启动成功,等待5秒"
sleep 5s

echo '开始创建其他需要的容器,请稍等,可能需要几分钟'
docker-compose --compatibility up -d keycloak kafka consul consul-config-loader
sleep 15s

docker-compose --compatibility up -d gateway-app unit-app data-center-app

sleep 25s
docker-compose --compatibility up -d
sleep 15s
docker restart nginx

echo '当前目录为:'$(pwd)
echo '所有命令执行完成,请稍等1分钟后,访问ip地址,查看界面是否正常展示!'
  • 最后,将这个脚本,加入到开机自启动里面。加入方法很多,我采用的是在/etc/rc.d/rc.local里写一个执行命令,上面前面几行就是干这个的
if cat '/etc/rc.d/rc.local' | grep "/home/docker-restart" > /dev/null
then
echo "已加入重启脚本"
else
echo "将docker服务重启加入服务器重启脚本"
chmod +x /etc/rc.d/rc.local
chmod +x /home/docker-restart.sh
cat >>/etc/rc.d/rc.local<<EOF
sh /home/docker-restart.sh &
EOF

fi

脚本介绍

  • 就是一个普通的shell脚本,脚本里都是最基础的一些命令
  • 我下面把我的脚本里用到的一些函数简单介绍下

判断文件内容是否包含某字符串

  • cat '/etc/rc.d/rc.local' | grep "/home/docker-restart" > /dev/null
  • cat 'file path and name' | grep "your str" > /dev/null
  • 主要使用catgrep,前面是文件路径和名称,我用的绝对路径;后面是要查找的字符串
  • 然后再进行判断 > /dev/null,包含则为true,不包含为false

给文件添加可执行权限

  • chmod +x /etc/rc.d/rc.local这句命令会给 /etc/rc.d/rc.local 文件添加可执行权限
  • 赋予权限后,在系统启动时,系统会自动执行该文件中的命令
  • 通过给该文件添加可执行权限,可以实现开机自启动某些自定义命令或服务
  • 但是请注意,该操作需要谨慎处理,避免不必要的安全风险或系统故障

给文件结尾添加内容

  • 主要使用cat写入
	cat >>/etc/rc.d/rc.local<<EOF
sh /home/docker-restart.sh &
EOF

  • sh后面加&,是为了后台启动,不影响开机速度

根据内容删除文件的指定行

  • 在早期部署时,重启脚本还不完善,在/etc/rc.d/rc.local添加了错误内容
  • 例如:应该是添加sh /home/docker-restart.sh &,结果使用相对位置,加了sh /root/docker-restart.sh &,而文件在home目录下,开机启动时执行不到,服务就没有重启
  • 还有的客户机器配置比较差,服务启动过程较慢,一开始写入/etc/rc.d/rc.local的是sh /home/docker-restart.sh,没有后面加&,导致系统一直在启动中,客户看到进度卡死(实际上在启动平台)又去重启
  • 因为客户都是内网环境,也没有专业运维,给客户更新部署时,是提供自带脚本的部署包。客户上传文件,执行脚本即可,让客户去使用命令改文件,有点困难
  • 需要一个命令,查找指定行,并删除,这个也有很多方法,我使用的是sed
if cat '/etc/rc.d/rc.local' | grep "docker-restart" > /dev/null
then
sed -i '/docker-restart/d' /etc/rc.d/rc.local
fi

echo "将docker服务重启加入服务器重启脚本"
chmod +x /etc/rc.d/rc.local
chmod +x $(pwd)/docker-restart.sh
cat >>/etc/rc.d/rc.local<<EOF
sh $(pwd)/docker-restart.sh &
EOF
举报

相关推荐

0 条评论