Linux环境开机自启java应用

news2024/9/29 7:16:10

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 使其立即生效
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/129003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebDAV之葫芦儿·派盘+File Manager

File Manager 支持WebDAV方式连接葫芦儿派盘。 手机文件太多,空间不足、隐藏文件多、文件清理不干净?推荐您一个功能强大的文件管理器,可以让你对手机中的各类文件进行管理,支持快速移动、复制粘贴、压缩解压等等。同时还能对已经安装的程序进行卸载,自动识别手机中的AP…

啥牌子的蓝牙耳机音质好?2023公认音质最好的蓝牙耳机

音乐是有魔力的,繁杂的工作和琐碎的生活,使得大多数人焦虑不安,音乐可以令人放松,蓝牙耳机越多越多,真不知道怎么挑好,品牌成百上千,款式就更不用说了,下面笔者专门整理了一期音质表…

【小西】优化生日品同步网易严选功能,使其支持多SPU对多SKU关系

目录前言思路代码实现实体ThemeActivityGift:spuId由 String类型变为JSONArrayThemeActivityGiftServiceImpl改造handleYxGiftByOperation:保存的是严选的生日品checkSpuIds:校验SPU有效性checkSpuIdExist:校验单个spuId是否存在c…

C语言函数栈帧的创建和销毁

前期学习的时候,我们可能有很多困惑,比如: 局部变量是怎么创建的? 为什么局部变量的值是随机值? 函数是怎么传参的?传参的顺序是怎样的? 形参和实参是什么关系? 函数调用是怎么…

分享丨品牌零售行业三大实践解读,全面搭建并落地数字化运营体系

以下内容来自神策数据创始人 & CEO 桑文锋关于数据驱动零售品牌业务增长的相关分享。点击文末“阅读原文”,了解神策品牌零售行业完整版解决方案。神策从 2020 年深入品牌零售领域,一路走来跌跌撞撞,不过思路越来越清晰,对该领…

Echarts:饼图默认高亮和选中(突出并高亮)/添加单击事件/X轴字符标签换行处理

饼图默认高亮: // 我这里实现的是饼图// 获取 this.sysfbChart this.$echarts.init(document.getElementById(sysfb))// 默认高亮第一个 // highlight:突出 this.sysfbChart.dispatchAction({type: highlight,seriesIndex: 0,dataIndex: 0}); 效果图: 饼图选中(突出并高亮):…

为什么自学 Python 看不进去?

如果刚开始学习python,没看懂,那就多看几次就会了。看不进去很正常,这个过程会很乏味,但是对于你建立牢固的编程思维是必须的。会有看不进去的这个阶段 python学习的秘诀在于对技术了解的广度和对数据结构研究的深度,不…

2022“易观之星”奖项公布,聚焦数字经济,助力数智创新

12月29日,“易观之星”颁奖典礼线上举办,重磅颁出2022“易观之星”奖项。 2022“易观之星”设置数字产品、数字企业2个系列共7大奖项,覆盖金融、品牌零售、汽车出行、文化消费等领域,挖掘和表彰各领域表现卓越的数字产品、数字企业…

【go语言之http模型reactor】

go语言之http模型reactor示例gnet.ServeinitListenerserveactivateEventLoopspolling前面说了go自带的原生netpoll模型,大致的流程就是每一个新的连接都会开启一个goroutine去处理,这样的处理的过程简单,高效,充分利用了go的底层的…

在 K8S 中测试环境中搭建 mongodb

1.可在服务器上面创建 https://kubernetes.io/docs/home/ #k8s官网 搜索Deployment 第一个就是例子 vi rs-mongodb.yaml apiVersion: apps/v1 kind: Deployment #资源类型 metadata:namespace: klvchenname: mongodblabels:app: mongodb spec:replicas: 1selector:mat…

STM32CubeMX学习笔记(50)——USB接口使用(DFU固件升级)

一、USB简介 USB(Universal Serial BUS)通用串行总线,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在 PC 领域的接口技术。USB 接口支持设备的即插即用和热插拔功能。USB 是在 1994 年底由英特尔、康柏、IBM、…

量子+智慧交通!玻色量子中标北京城市轨道交通项目

​2022年11月,玻色量子与北京交通大学国家重点实验室组成联合体,接受北京城市轨道交通咨询有限公司委托,三方共同探索和实施量子计算在智慧地铁中的应用场景研究工作。 北京城市轨道交通咨询有限公司 此次科研合作,玻色量子将充分…

IB学生申请牛津剑桥需要注意什么?

HL要选修3门颇具挑战性的课程,SL还要再选3门课程,写好IA,通过包括EE\CAS\TOK在内的3门核心科目,IB课程的学习压力确实挺大。。 对于志在牛剑这样顶尖高校的IB学生而言,压力更大,因为牛剑等顶尖高校对于IB小…

【JavaEE】在Linux上搭建一个Java部署环境

努力经营当下,直至未来明朗! 文章目录在Linux上搭建一个Java部署环境1. 安装jdk2. 安装tomcat3. 安装mysql小结普通小孩也要热爱生活! 在Linux上搭建一个Java部署环境 为了部署java web程序,需要安装:jdk、tomcat、m…

Pandas处理大数据的性能优化技巧

Pandas是Python中最著名的数据分析工具。在处理数据集时,每个人都会使用到它。但是随着数据大小的增加,执行某些操作的某些方法会比其他方法花费更长的时间。所以了解和使用更快的方法非常重要,特别是在大型数据集中,本文将介绍一…

百趣代谢组学文献分享:《Food Function》发表过的封面文章

百趣代谢组学今日分享西北大学食品科学与工程学院曹炜教授团队在食品科学领域国际著名学术期刊《Food& Function》上发表封面文章:Effects of honey-extracted polyphenols on serum antioxidant capacity and metabolic phenotype in rats。该研究在国际上首次…

Springboot定时调度任务动态管理

前言 现在智能手表、手环,相信很多人都使用过,其中有一个功能,就是会有各种的提醒,如喝水提醒、运动提醒、远眺提醒,本质上根据用户的设置,间隔一定时间执行一个调度任务,提醒用户做某件事情。这…

myBaits Expert Human Affinities Kit ——捕获人类样本中的 SNPs 信息,化石、法医样本和降解 DNA 样本均适用

myBaits Expert Human Affinities Kit用于人类基因组SNPs富集,该试剂盒与古人类种群遗传学领域的专家合作设计和开发,针对古代和现代人类种群中已知的2M以上多态位点设计,特异性捕获人类基因组文库中标志性的有效信息,提高人类种群…

ardupilot EKF3核心算法《可以使用的传感器》

目录 文章目录 目录摘要1.可以使用的传感器2.可以使用的传感器如果从代码中提供原始数据2.1 IMU传感器提供的有用数据2.2地磁传感器提供的有用数据2.3 GPS传感器提供的有用数据2.4 气压计传感器提供的有用数据摘要 本节主要讲解Ardupilot EKF3核心算法《可以使用的传感器》。 …

java租房app房东直租系统租房网站

简介 本系统是前后端分离的项目,前端使用mui开发科打包成为安卓的apk。后端采用springboot开发。主要是房东登录注册后,可以发布房源信息,可以上架下架编辑删除房源信息等,租房者可以搜索自己需要的房子,然后进入详情…