IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 记录简单的服务自动化shell脚本 -> 正文阅读

[系统运维]记录简单的服务自动化shell脚本

为了能够方便的启动、重启、停止或者查询服务状态,需要写脚本来控制。

(未完成版本)

首先是配置文件,类似于代码的config,只需要修改这里边的参数再去运行脚本即可实现自动化

config.sh

#项目名称
export PARAM="say"
#运行代码的名称
export EXEC_FILE="say.py"
#代码、日志存放目录
export DIR=`pwd`
#代码类型
export PRO_TYPE="python"
#后台运行
export JOB_TYPE="background"

#目前支持的代码类型枚举
export PRO_PYTHON="python"
export PRO_SHELL="/bin/bash"
export PRO_JAVA="java"
export PRO_SPARK="spark"

#支持的运行方式是后台还是非后台
export REAL_TYPE="real"
export OFF_TYPE="background"

然后配置好配置我们就可以运行

server.sh

source `pwd`/config.sh
source /etc/profile

#获取进程或者父进程
function get_pid(){
 PID=`ps -ef | grep "$DIR/$PARAM" | grep -v grep|awk '{print $2" "$3}'`
 local pid=($PID)
 if [ "$1" = "parent" ];then
   echo "${pid[1]}"
 else
   echo "${pid[0]}"
 fi
}

#get_pid parent

#运行
function start_model(){
 local COMMAND="$1"
 local SUC_LOG_FILE="$2"
 local ERR_LOG_FILE="$3"

 if [[ "$JOB_TYPE" = $REAL_TYPE ]];then
    echo $COMMAND 2>&1 |tee -a $SUC_LOG_FILE
    $COMMAND 2>&1 |tee -a $SUC_LOG_FILE
 else
    echo nohup $COMMAND 1>>$SUC_LOG_FILE 2>>$ERR_LOG_FILE &
    nohup $COMMAND 1>>$SUC_LOG_FILE 2>>$ERR_LOG_FILE &
 fi
}

#根据项目类型不同的运行方式
function start(){
 PID=`get_pid`
 if [ -z "${PID}" ];then
    RUN=""
    case ${PRO_TYPE} in
     ${PRO_PYTHON})
        RUN="${PRO_PYTHON} ${DIR}/${EXEC_FILE}"
        start_model "$RUN" "${DIR}/${PARAM}.log" "${DIR}/${PARAM}_ERR.log"
        ;;
     ${PRO_SHELL})
        RUN="${PRO_SHELL} ${DIR}/${EXEC_FILE}"
        start_model "$RUN" "${DIR}/${PARAM}.log" "${DIR}/${PARAM}_ERR.log"
        ;;
     ${PRO_JAVA})
        RUN=""
        ;;
     ${PRO_SPARK})
        RUN=""
        ;;
     *)
        echo "$PRO_TYPE is not support"
        exit 1
     ;;
    esac
    sleep 2
    PID=`get_pid`
    echo "${PARAM} is running pid:$PID"  
 else
    echo "PID: $PID is running"
 fi
}

#start

#杀死进程
function killpid(){
 local PID=`get_pid parent`
 if [ "$PID" != "1" ];then
    kill $PID
 else
    local PID=`get_pid`
    if [[ -n "$PID" ]];then
       kill `get_pid`
    else
       echo "PID=$PID cannot be killed!"
    fi
 fi
}

#停止
function stop(){
 PID=`get_pid`
 if [ -n "${PID}" ];then
    echo "$PARAM is running pid:$PID"
    killpid $PID
    echo "$PARAM is kill..."
 else
    echo "$PARAM is not running"
 fi
}

#获取状态
function status(){
 PID=`get_pid`
 if [ -n "${PID}" ];then
    echo "$PARAM is running,PID=$PID"
 else
    echo "$PARAM is not running"
 fi
}

#选择使用方式
case $1 in
 start) start ;;
 stop) stop ;;
 status) status ;;
 restart) stop && sleep 2 && start ;;
 *) echo "please use start|stop|status|restart";;
esac

使用demo

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:57:31  更:2022-04-09 18:59:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:40:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码