Linux:将服务重启脚本加入CentO7的开机启动里

这篇具有很好参考价值的文章主要介绍了Linux:将服务重启脚本加入CentO7的开机启动里。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用场景

  • 我们的平台服务使用docker部署,使用docker-compose进行管理
  • 平台部署到客户环境时,一小部分客户,使用自己机房或单独的服务器,并没有做断电保护,有时候这台服务器会断电重启
  • 断电重启后,我们的平台服务要能自动拉起来,为客户正常提供服务
  • 实现思路很简单,创建一个平台维护脚本,开机启动时自动执行
  • 首先把平台服务的启动过程,编写为一个shell脚本,按照一定顺序启动服务的各个组件
  • 然后将此脚本,加入CentOS7的开机启动项中

平台重启脚本

  • 先来讲一下平台的重启脚本
  • 由于我们的平台服务使用docker部署的,首先需要将docker服务,加入开机自启动
systemctl enable docker
  • 然后编写平台服务重启脚本docker-restart.sh,主要是根据自己的应用情况,搞一个启动顺序
  • 主要思路是,先启动各个中间件(PostgreSQLRediskafka等),再启动各个应用服务,最后再启动nginx等其他所有未启动的服务
#!/bin/bash

cd /home
echo '当前目录为:'$(pwd)
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开机启动执行 权限,再在里面写一个执行平台重启脚本的命令
  • 下面的一段,是加到平台服务重启脚本docker-restart.sh里面前几行里面的,第一次部署平台时,执行下这个脚本
  • 主要逻辑:根据文件内容,判断平台重启脚本是否已加入开机启动,如果没有,则赋予执行权限并加入
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
  • 注意:在CentOS 7中,系统默认不加载/etc/rc.d/rc.local文件,需要手动添加开机启动项来启动该文件。所以有了这一行,chmod +x /etc/rc.d/rc.local,保证文件正常加载和执行

脚本内容详解

  • docker-restart.sh就是一个普通的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 文件添加可执行权限
  • 赋予权限后,在系统启动时,系统会自动执行该文件中的命令
  • 通过给该文件添加可执行权限,可以实现开机自启动某些自定义命令或服务
  • 但是请注意,该操作需要谨慎处理,避免不必要的安全风险或系统故障

给文件结尾添加内容

  • 主要是用这几句命令,在 /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文件的内容,修复错加的命令语句
  • 在早期部署时,重启脚本还不完善,在/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

文章来源地址https://www.toymoban.com/news/detail-511643.html

到了这里,关于Linux:将服务重启脚本加入CentO7的开机启动里的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Cento7 Docker-compose安装RabbitMQ

      RabbitMQ是一个消息中间件,是用Erlang语言编写的。RabbitMQ据说具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。接下来我们就以docker形式安装。 1.先安装docker环境 RabbitMQ的docker-compose.yml的文件内容如下: 默认

    2024年02月11日
    浏览(37)
  • 在SHELL脚本中用curl处理服务器开机、关机、强制关机、重启动作

    思路:利用了一张主控板来获取服务器的开关机状态,开关机其实是给服务器一个500ms~1000ms的脉冲,等同与按了机箱面板的开关机按钮开关。

    2024年02月07日
    浏览(54)
  • windows Server【开机启动和任务计划程序】实现服务器重启后项目自启动

    有些时候我们希望计算机开机后就启动一些服务或应用程序。 使用 Win+R 调出运行,输入: 1️⃣ shell:startup 用户开机自启动(程序开机自启动只针对当前登录的用户) 打开的目录为 C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup 2️⃣ shell:common startup 系统开

    2024年02月08日
    浏览(58)
  • Linux | 开机自启动配置/启动脚本

    1.1.1 修改资源下载地址 1.1.2 安装/验证 安装 会有一个选择 yes/no的 yes 就完了 验证 这里准备了 Tomcat、 Minio、Elasticsearch 的脚本,根据自己需求修改. 启中包含了 start、stop、 restart 三个方法 – 将脚本放到 /etc/init.d 文件下 – 看脚本注释 1.2.1 Tomcat 脚本 1.2.2 Minio 脚本 1.2.3 Elastics

    2024年02月09日
    浏览(54)
  • windows服务器下java程序健康检测及假死崩溃后自动重启应用、开机自动启动

    前两天由于项目需要,一个windows上的批处理任务(kitchen.bat),需要接到mq的消息通知后执行,为了快速实现这里我们通过springboot写了一个jar程序,用于接收mq的消息,并调用bat文件。 调用windows的批处理脚本bat,并支持传参 可根据配置设置并发,同时消费多个mq消息调用多个

    2024年02月12日
    浏览(49)
  • Windows系统编写bat脚本启动,停止,重启Java服务jar包

    创建一个以bat后缀结束的文件,写入一下代码: 在Windows系统上面创建 start.bat 启动jar包脚本编辑以下内容: 给窗口命名:“jeeplus-gateway”,如果是微服务的话方便查看 在Windows系统上面创建 stop.bat 停止jar包脚本编辑以下内容: 重启jar包就是将两个合并到一起: 双击 bat文件 确

    2024年02月03日
    浏览(72)
  • Linux开机rc.local不自启动执行脚本问题的排查思路及问题解决

    问题 Linux系统中,在rc.local里面配置的启动命令等不能能够在开机的时候进行自启动 问题解决 解决问题排查中最大的麻烦,需要进行reboot重启 查看rc-local的运行状态 systemctl status rc-local 如果是loaded或者是faild类似,说明启动确实出现了问题 首先查看检查是否还有rc.local的软连

    2024年02月16日
    浏览(41)
  • linux服务器启动、关闭、重启命令

    关机命令: 1、halt 立刻关机 2、poweroff 立刻关机 3、shutdown -h now 立刻关机(root用户使用) 4、shutdown -h 10 10分钟后自动关机 如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启 5、init0 停机或者关机 重启命令: 1、reboot 立即重启 2、shutdown -r now 立刻重启(root用户使

    2024年02月15日
    浏览(85)
  • Linux查看开机启动的服务

    在Linux系统中,可以使用不同的命令和工具来查看开机启动的服务。以下是一些常用的方法: systemctl 命令: 使用 systemctl 命令可以查看系统中所有正在运行的服务以及它们的状态。 若要查看某个特定服务的状态,可以使用: 若要查看某个服务是否在开机时启动,可以使用:

    2024年02月04日
    浏览(38)
  • Linux如何查看服务启动状态是否开机自动启动

    本文为joshua317原创文章,转载请注明:转载自joshua317博客 Linux如何查看服务启动状态是否开机自动启动 - joshua317的博客 linux中查看服务启动状态是否开机自动启动的方法: 1、打开linux终端; 2、在终端命令行中输入“chkconfig --list servicename”命令查看服务启动状态是否开机自动

    2023年04月09日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包