Shell 一个简单的服务部署启动重启检查和保活脚本

2023-12-25 22:58

本文主要是介绍Shell 一个简单的服务部署启动重启检查和保活脚本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

起初为了写一个守护进程,定时监控软件死活,其核心在于使用ps 命令加上字符串过滤命令判断进程是否还存活。有了这个基础就能顺便写一个较为通用的服务部署脚本

第一个脚本,用户定时任务保活

demo1.sh

#!/bin/bash
App="/www/wwwroot/main -env=live"
file_name="/root/selfman/corn.log"  #重启脚本的日志
pid=0
proc_num() {num=`ps -ef | grep "$App" | grep -v grep | wc -l`return $num 
}
proc_id(){  pid=`ps -ef | grep "$App" | grep -v grep | awk '{print $2}'`  
} 
proc_num  #执行proc_num(),获取进程数
number=$?  #获取上一函数返回值
if [ $number -eq 0 ]  #如果没有该进程,则重启
then$App  #启动程序的命令proc_id echo ${pid}, `date` >> $file_name  #把重启的进程号、时间 写入日志
fi

创建一个cron作业
task.cron

*/1 * * * * /root/demo1.sh

启动定时任务

crontab /root/task.cron

第二个脚本为部署脚本

其中的deploy函数,需要自行按需修改, App 命令也需要修改

deploy.sh

#!/bin/bash# 启动你的服务的命令,确保其实阻塞的,能通过其PID kill掉
App="/www/wwwroot/main -env=live"echo "cmd is:"
echo $1
echo "app is:"
echo $Appfunction killProsess() {# 获取进程 PIDPID=$(ps -ef | grep "$App" | grep -v grep | awk '{print $2}')echo "PID: $PID"# 杀死进程kill $PID
}function start() {echo "start"echo "----------------"nohup $App >>log/info.log&echo "started"
}function stop() {echo "stop"echo "----------------"echo $App | killProsess 
}function restart() {echo "restart"echo "----------------"stopstart
}# deploy 包括停止应用,编译,部署,和启动
function deploy() {echo "deploy"echo "----------------"stopecho "----------------"echo "remove old"rm /www/wwwroot/mainecho "----------------"echo "building"go build -mod=vendor main.goecho "----------------"echo "deploying"cp ./main /www/wwwroot/mainecho "----------------"start
}function status() {ps -ef | grep "$App" | grep -v grep
}case "$1" instart )echo "****************"startecho "****************";;stop )echo "****************"stopecho "****************";;restart )echo "****************"restartecho "****************";;deploy )echo "****************"deployecho "****************";;status )echo "****************"statusecho "****************";;* )echo ""echo "no command"echo "example: deploy.sh start"echo "cmd can be: start/stop/restart/deploy/status"echo ""echo "";;
esac

执行示例

chmod +x ./deoply.sh
./deploy.sh status

这篇关于Shell 一个简单的服务部署启动重启检查和保活脚本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/537263

相关文章

Docker部署Jenkins持续集成(CI)工具的实现

《Docker部署Jenkins持续集成(CI)工具的实现》Jenkins是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins... 目录前言一、准备工作二、设置变量和目录结构三、配置 docker 权限和网络四、启动 Jenkins

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块