在linux上启动、重启、查询、停止java服务脚本,并且设置定时任务自动执行

启动的脚本

以下代码来源于另一位博主,在实践过程中需要设置定时任务,所以遇到一些问题,把没有写清楚的地方优化了一下。

#!/bin/bash
#这里可替换为你自己的执行程序,再更改启动方法的部分代码,其它地方无需更改
APP_NAME=manage.jar

#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh 脚本名.sh [start|stop|restart|status]"
    exit 1
}

#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回1,存在返回0
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#启动方法,这里更改自己的启动命令,java和APP_NAME需要指定自己的绝对路径,后面重定向的日志路径可以自己定义
start(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
  else
    nohup /data/software/jdk1.8.0_221/bin/java -jar /data/www/$APP_NAME > /dev/null 2>> /data/www/logs/manage.log &
   date_time=`date +"%Y%m%d%H%M%S"`
    echo $date_time+"${APP_NAME} start success"
  fi
}

#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi
}

#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}

#重启
restart(){
  stop
  start
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

脚本运行的命令 

我们把上面的脚本复制到以下目录的脚本文件/data/www/shtools/startmanage.sh,执行命令可以得到不同的结果。

进入脚本目录
/data/www/shtools/startmanage.sh
3.1查看状态 bash startmanage.sh status
结果示例:manage.jar is running. Pid is 12841

3.2启动 bash startmanage.sh start
结果示例:manage.jar is already running. pid=12841 .-----------表示进程存在
20230707191016+manage.jar start success -----------------------表示启动成功

3.3停止  bash startmanage.sh stop

3.4重新启动 bash startmanage.sh restart
结果示例:20230707191154+manage.jar start success

设置定时任务

设置的三个定时任务运行脚本,
第一个是0 3 * * * bash /data/www/logtools/startplan-manage.sh restart >>/data/www/logs/restart.log是每天3点重启服务,
第两个是每分钟检查服务挂没挂,挂了就自动启动。

[root@localhost logtools]# crontab -l
0 3 * * * bash /data/www/shtools/startmanage.sh restart >>/data/www/logs/restart.log
* * * * * bash /data/www/shtools/startmanage.sh start 2>>/data/www/logs/start.log

注意事项 

nohup的启动命令必须要使用绝对路径的java和绝对路径的jar包,不然手动执行脚本会成功,但是定时任务执行会报错java命令找不到。

定时任务执行脚本中脚本的输出需要重定向到自己指定的文件,不然无法看到shell脚本输出了什么,所以在定时任务的执行命令后面有重定向。

nohup /data/software/jdk1.8.0_221/bin/java -jar /data/www/$APP_NAME > /dev/null 2>> /data/www/logs/manage.log &表示标准输出不输出,错误输出到日志文件manage.log中。

最上面的脚本需要改动的是两个地方,第一个是APP_NAME,第二个是启动方法那里的绝对路径。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值