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

相关文章

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

shell中set -u、set -x、set -e的使用

《shell中set-u、set-x、set-e的使用》本文主要介绍了shell中set-u、set-x、set-e的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录✅ 1. set -u:防止使用未定义变量 作用: 示例:❌ 报错示例输出:✅ 推荐使用场景:✅ 2. se

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st