一键启动、停止脚本开发指引

一、背景介绍

项目开发时使用gradle构建工具进行项目构建开发,借助application插件进行项目打包。

./gradlew clean build

执行以上命令后,gradle会自动将项目打包为zip包,并放在build/distributions目录下。
zip包里面包含了两个目录:

  • bin : gradle自动生成的启动脚本,与项目/模块名称相同。
  • lib : 所有的运行时jar包。

一般情况下,使用gradle自动生成的启动脚本即可满足需求,但要做成类似hadoop-daemon.sh这样的一键启动脚本,仍需在自动生成的脚本基础上做些封装。

二、一键启动脚本

封装的一键启动脚本主要扩展了以下功能:

  1. 通过nohup在后台启动服务,常驻运行。
  2. 捕获服务的标准输出,并保存到日志。
  3. 自定义Log4j2的日志文件名,添加用户名、主机名。
  4. 设置JVM出现内存异常时的输出日志。

示例:

# !/usr/bin/env bash
#
# 服务一键启动脚本
#
# @author chriscchen
# @createtime 2020-05-21
#

bin=`dirname ${BASH_SOURCE-$0}`
bin=`cd "$bin"; pwd`

# find correct directory
my_dir_prefix="/data/logs/data-studio"

# 模块名称,也是gradle自动生成的启动脚本名称
MODULE_NAME="ds-ide"

# 自定义日志目录
export DS_LOG_DIR=${my_dir_prefix}/${MODULE_NAME}

# 自定义Log4j2的日志文件名,添加用户名、主机名
LOG4J_OPTS="-Dlog.dir=${DS_LOG_DIR} -Dlog.file=${MODULE_NAME}-${USER}-${HOSTNAME}.log"

# 设置JVM出现内存异常时的输出日志
JVM_LOG_OPTS="-XX:HeapDumpPath=${DS_LOG_DIR} -XX:ErrorFile=${DS_LOG_DIR}/ps_err_pid%p.log"

# use JAVA_OPTS to pass the options
export JAVA_OPTS="${LOG4J_OPTS} ${JVM_LOG_OPTS}"

# 后台启动服务,并捕获标准输出,保存到日志文件
nohup ${bin}/${MODULE_NAME} >> ${DS_LOG_DIR}/${MODULE_NAME}.out.$(date +%Y%m%d%H%M%S) 2>&1 &

if [[ $? != 0 ]]; then
    echo "Failed to start ${MODULE_NAME}" 1>&2
    exit 1
else
    echo "${MODULE_NAME} started"
fi

三、一键停止脚本

一般情况下,停止进程都是通过kill命令来完成,但kill命令并不是同步的。
执行kill命令,本质上只是向进程发送了“关闭”命令,进程接受到“关闭”命令并响应给kill命令,这条命令就执行成功并退出了。
但进程是否已经停止,是由程序自身的停止逻辑决定。

所以参考 hadoop-daemon.sh stop停止脚本,实现了一键停止服务脚本,主要实现了等待进程退出的功能。

示例:

# !/usr/bin/env bash
#
# @author chriscchen
# @createtime 2020-05-21
#

# 根据类名来查找进程。要注意的是:如果启动进程时,显式拼接了所有的jar包,会导致`ps`时显示名称过长,无法查找得类名的。一般在指定`classpath`时,通过`lib/*`的方式来指定。
PIDS=$(ps -ef | grep -v grep | grep "com.demo.Application" | awk '{print $2}')

SERVICE_NAME="ds-ide"
# 没有找到进程,退出
if [[ -z "$PIDS" ]]; then
    echo "No ${SERVICE_NAME} to stop" 1>&2
else
    kill -s TERM ${PIDS}

    echo "Waiting for ${SERVICE_NAME} process to exit"
    # 通过 kill -0 来判断进程是否已经退出 
    while kill -0 ${PIDS} 2>/dev/null; do
        sleep 1
    done
    echo "Stopped ${SERVICE_NAME}"
fi

Hadoop是一个开源的分布式计算框架,用于处理大规模数据集的存储和处理。它提供了一个可靠的、可扩展的分布式系统,能够在大量普通计算机的集群上运行。为了方便用户启动Hadoop集群,开发者编写了一键启动脚本Hadoop一键启动脚本的作用是简化Hadoop集群的启动过程。用户只需要运行这个脚本,就能够自动完成所有必要的设置和启动步骤,而不需要手动逐一执行命令和配置文件。一键启动脚本通常会检查系统环境和配置文件,确保一切准备就绪,然后根据用户的需求启动特定的Hadoop服务和组件。 一键启动脚本通常包括以下几个主要步骤: 1. 检查系统依赖:脚本会检查系统环境,包括操作系统、Java版本等,确保满足Hadoop运行的最低要求。 2. 配置文件检查:脚本会检查Hadoop配置文件,如core-site.xml、hdfs-site.xml等,确保配置正确且完整。 3. 启动服务:根据用户输入的命令,脚本启动相应的Hadoop服务,如启动HDFS、启动YARN等。在启动过程中,脚本会在终端显示详细的启动日志,方便用户查看和调试。 4. 验证启动脚本会检查Hadoop集群的启动状态,确认所有服务均已成功启动。如果有错误或异常,脚本会显示相关错误信息,并提供解决方案。 总之,Hadoop一键启动脚本能够极大地简化Hadoop集群的部署和启动过程,提高用户的使用效率和便利性。用户只需准备好必要的配置文件和环境,然后运行一键启动脚本,即可轻松启动Hadoop集群。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值