极简体验-shell脚本实现应用服务开机自启

shell脚本实现应用服务多环境开机自启
本文介绍了一种基于shell脚本的通用方法,用于解决应用服务在不同部署路径、启动指令、环境下的开机自启问题。通过统一部署路径、判断启动脚本、传参鉴别环境及获取部署目录用户,实现一个脚本适用于所有应用服务的自启,降低了运维工作成本。

技术导语: 之前有篇文章已经基本介绍了应用服务开机自启的实现方法,本文着重基于脚本管理方便性、脚本内容通用性、脚本应用环境适配性三大方面的考虑,编写自启脚本,达到一个脚本适用所有应用服务自启的效果。

关于运维工作的最佳实践

在接到这个需求的初期,就在思考如何最小能力成本地编写脚本,包括后续的脚本维护。主要有如下几大难题。

  • 应用部署路径不同
  • 应用启动指令不同
  • 应用部署环境不同
  • 应用部署用户不同

针对三个难题的解决方案更多的还是从部署规范上去思考。

应用部署路径不同

前提: 统一部署路径规范,所有应用部署在同一级目录,每个应用预先定义好路径名称。
脚本实现: 可以通过遍历的方式获取到所有应用的部署路径。

应用启动指令不同

前提: 理想情况下可以统一启动指令,特殊情况下允许不同启动命令的存在。
脚本实现: 可以在自启脚本里面通过判断启动脚本是否存在获知启动指令。

应用部署环境不同

前提: 当前主流的环境分类:开发、测试、预生产、生产。不同环境可能导致启动参数不同,其实也可以归类为启动指令不同。
脚本实现: 通过传参的方式鉴别不同环境。

应用部署用户不同

前提: 为了实现应用间隔离,行业内做法一般是不同应用通过不同的用户部署,从安装部署到启停均适用应用用户进行操作。
脚本实现: 可以在自启脚本里面获取部署目录所属用户。

基于解决这三大问题的逻辑,编写脚本如下:

vi reboot_start_all.sh

#!/bin/bash
cd /app/deploy/server #预先规范的统一部署路径,其下每一个文件夹代表一个应用目录
filelist=`ls $dir` #获取应用目录列表
echo $(date +'%Y-%m-%d %H:%M:%S')>> /app/reboot_start_all.log
echo 'start restart app!!!' >> /app/reboot_start_all.log
for file in $filelist #遍历应用目录
do
echo 'dirname:'$file >> /app/reboot_start_all.log
username=`ls -lrt /app/deploy/server/$file |awk '{print $3}'` #获取部署用户
echo 'username:'$username >> /app/reboot_start_all.log
cd /app/deploy/server/$file/bin
if [ -f "startway1.sh" ];then
    su - $username <<EOF #切换到应用用户进行应用服务的启停
    cd /app/deploy/server/$file
    pwd
    /usr/bin/sh bin/shutdownway1.sh $1 && /usr/bin/sh bin/startupway1.sh $1 # $1是外部传入的变量,值域范围[test,dev,prod]
    exit;
EOF
else
    su - $username <<EOF
    cd /app/deploy/server/$file
    pwd
    /usr/bin/sh bin/shutdownway2.sh $1 && /usr/bin/sh bin/startupway2.sh start $1
    exit;
EOF
fi
cd /app/deploy/server
done
echo $(date +'%Y-%m-%d %H:%M:%S')>> /app/reboot_start_all.log
echo 'finish restart app!!!' >> /app/reboot_start_all.log

执行方式

测试环境: sh reboot_start_all.sh test
开发环境: sh reboot_start_all.sh dev
生产环境: sh reboot_start_all.sh prod

如果您喜欢我的文章,请关注我哦。后续会提供更多的干货分享。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值