Linux环境开机自启java应用

该博客介绍了如何在CentOS系统中通过crontab设置定时任务,确保Java应用在系统启动时自动运行。通过编写run_crontab.sh和op_phmmt.sh脚本,实现了应用的自启动和意外退出后的自动重启。同时,脚本详细记录了运行日志和状态,便于监控和问题排查。
摘要由CSDN通过智能技术生成

Linux环境设置开机自启java应用(Linux定时任务)

crontab是Unix和Linux用于设置需要周期性被执行的指令,是Linux服务器很常用的技术,很多任务都会设置在crontab循环执行。
crontab : 提供给用户控制任务计划的命令,创建、删除、编辑任务计划等

详细过程:
1.在 CentOS上设置一个 crontab 的定时任务(每5分钟执行一次run_crontab.sh)
输入命令:
cd /etc
cat crontab(编辑用:vim crontab)
如图:在这里插入图片描述
ps: 执行命令:sudo systemctl restart crond.service 使其立即生效

补充:
如果上述定时任务未生效,是用crontab -l 命令,出现:==no crontab for root ==
可以尝试crontab -e,然后输入:

*/1 * * * * root echo 123 >> /home/test.log

然后用crontab -u root -l 可以查看当前定时任务,或者用cat /var/spool/cron/root
请添加图片描述

PS:
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

2.切到相应目录(我的是:cd /data/opt/script/shell)并编辑run_crontab.sh
命令:vim run_crontab.sh 添加自定义脚本,如图:
在这里插入图片描述
3.切换相应目录(我的是:cd /data/opt/script/)并编辑op_phmmt.sh,如图:
在这里插入图片描述在这里插入图片描述
ps:op_phmmt.sh脚本,当应用意外挂了,会自动重启

4.验证脚本是否生效:
查看脚本运行状态:sh op_phmmt.sh status
运行脚本:sh op_phmmt.sh start
重启linux服务器:reboot -f

5.整个过程在这里插入图片描述

补充:
1.run_crontab.sh脚本内容:

#!/bin/bash
. /etc/profile
LOG_HOME=/data/opt/monitorlog/crontab
DATE=$(date +"%F")
echo $(date +%Y-%m-%d%n%H:%M:%S) >> $(p=$LOG_HOME/$DATE;[[ ! -d "${p}" ]] && mkdir -p ${p};echo ${p}/$DATE.txt)
/data/opt/script/op_mariadb.sh monitor >> $LOG_HOME/$DATE/$DATE.txt
/data/opt/script/op_clickhouse.sh monitor >> $LOG_HOME/$DATE/$DATE.txt
/data/opt/script/op_docker.sh monitor >> $LOG_HOME/$DATE/$DATE.txt
/data/opt/script/op_redis.sh monitor >> $LOG_HOME/$DATE/$DATE.txt
/data/opt/script/op_kafka.sh monitor >> $LOG_HOME/$DATE/$DATE.txt
/data/opt/script/op_phmmt.sh monitor >> $LOG_HOME/$DATE/$DATE.txt

2.op_phmmt.sh脚本内容:

#!/bin/sh
# ./op_phmmt.sh start 启动 stop 停止 restart 重启 status 状态 monitor 监控(未启动->自动重启)
# JVM参数
JVM_OPTS="-Dname=$AppName  -Duser.timezone=Asia/Shanghai -Xms256m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
APP_HOME=/data/opt/phmmt
LOG_PATH=$APP_HOME/logs/$AppName.log
AppName2=phm-webapp
AppName=/data/opt/phmmt/phm-webapp-0.0.1-SNAPSHOT.jar
opUser=root
RE_LOG_HOME=/data/opt/monitorlog/crontab
RE_LOG_FILE=$RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txt
STATE_HOME=/data/opt/monitorlog/component-status
STATE_FILE=$STATE_HOME/$AppName2

if [ `whoami` != "$opUser" ];then
    echo -e " only $opUser can run me"
    exit 1
fi

if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status|monitor} \033[0m"
    exit 1
fi

if [ "$AppName" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi

if [ ! -d "$RE_LOG_HOME/$(date +%F)/" ];
then
    mkdir $RE_LOG_HOME/$(date +%F)
fi

function start()
{
    PID=`ps -ef |grep java|grep $AppName2|grep -v grep|awk '{print $2}'`

	if [ x"$PID" != x"" ]; then
	    echo "$AppName is running..."
	else
                nohup java $JVM_OPTS -Dspring.profiles.active=test -jar $AppName > /data/opt/phmmt/logs/phmmt.log 2>&1 &
#		nohup java $JVM_OPTS -Dspring.profiles.active=prod -jar $AppName > /dev/null 2>&1 &
#		nohup java $JVM_OPTS -Dspring.profiles.active=dev184 -jar $AppName 2>&1 | cronolog $APP_HOME/logs/log.%Y-%m-%d.out >> /dev/null &
		echo "Start $AppName success..."
	fi
}

function stop()
{
    echo "Stop $AppName"

	PID=""
	query(){
		PID=`ps -ef |grep java|grep $AppName2|grep -v grep|awk '{print $2}'`
	}

	query
	if [ x"$PID" != x"" ]; then
		kill -TERM $PID
		echo "$AppName (pid:$PID) exiting..."
		while [ x"$PID" != x"" ]
		do
			sleep 1
			query
		done
		echo "$AppName exited."
	else
		echo "$AppName already stopped."
	fi
}

function restart()
{
    stop
    sleep 2
    start
}

function status()
{
    PID=`ps -ef |grep java|grep $AppName2|grep -v grep|wc -l`
    if [ $PID != 0 ];then
        echo "$AppName is running..."
    else
        echo "$AppName is not running..."
    fi
}

function monitor()
{
    PID=`ps -ef |grep java|grep $AppName2|grep -v grep|wc -l`
    if [ $PID != 0 ];then
        echo "$AppName is running..."
        echo $(date +%Y-%m-%d%n%H:%M:%S)_running > $STATE_FILE
    else
	start
        echo "$AppName is not running,and restarting..."
        # 重启保存到日志
        echo $(date +%Y-%m-%d%n%H:%M:%S)_notrunning > $STATE_FILE
        echo $(date +%Y-%m-%d%n%H:%M:%S) >> $RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txt
        echo "$AppName is not running,and restarting..." >> $RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txt
    fi
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    monitor)
    monitor;;
    *)
esac
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值