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 $App


function killProsess() {
    # 获取进程 PID
	PID=$(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 "----------------"
	stop
	start
}

# deploy 包括停止应用,编译,部署,和启动
function deploy() {
	echo "deploy"
	echo "----------------"
	stop
	echo "----------------"
	echo "remove old"
	rm /www/wwwroot/main
	echo "----------------"
	echo "building"
	go build -mod=vendor main.go
	echo "----------------"
	echo "deploying"
	cp ./main /www/wwwroot/main
	echo "----------------"
	start
}

function status() {
	ps -ef | grep "$App" | grep -v grep
}

case "$1" in
	start )
		echo "****************"
		start
		echo "****************"
		;;
	stop )
		echo "****************"
		stop
		echo "****************"
		;;
	restart )
		echo "****************"
		restart
		echo "****************"
		;;
	deploy )
		echo "****************"
		deploy
		echo "****************"
		;;
	status )
		echo "****************"
		status
		echo "****************"
		;;
	* )
		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

你可能感兴趣的:(运维,网站,linux,运维开发)